From e39b443280e854366d23157656da052745eb7041 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fa=E9=B8=BD?= <43724908+Akarinnnnn@users.noreply.github.com>
Date: Thu, 3 Jul 2025 18:23:12 +0800
Subject: [PATCH] Add callback or callresult annotations to interface methods.
---
.vscode/launch.json | 17 ++++++
CodeGen/src/interfaces.py | 17 ++++++
.../Runtime/SteamHasAsyncResultAttributes.cs | 56 +++++++++++++++++++
.../Runtime/autogen/isteamapps.cs | 1 +
.../Runtime/autogen/isteamfriends.cs | 8 +++
.../Runtime/autogen/isteamgameserver.cs | 3 +
.../autogen/isteamgameserverinventory.cs | 3 +
.../Runtime/autogen/isteamgameserverstats.cs | 2 +
.../Runtime/autogen/isteamgameserverugc.cs | 20 +++++++
.../Runtime/autogen/isteamgameserverutils.cs | 1 +
.../Runtime/autogen/isteamhtmlsurface.cs | 1 +
.../Runtime/autogen/isteaminput.cs | 2 +
.../Runtime/autogen/isteaminventory.cs | 3 +
.../Runtime/autogen/isteammatchmaking.cs | 6 ++
.../Runtime/autogen/isteamremotestorage.cs | 21 +++++++
.../Runtime/autogen/isteamtimeline.cs | 2 +
.../Runtime/autogen/isteamugc.cs | 20 +++++++
.../Runtime/autogen/isteamuser.cs | 4 ++
.../Runtime/autogen/isteamuserstats.cs | 10 ++++
.../Runtime/autogen/isteamutils.cs | 1 +
.../Runtime/autogen/isteamvideo.cs | 1 +
21 files changed, 199 insertions(+)
create mode 100644 .vscode/launch.json
create mode 100644 com.rlabrecque.steamworks.net/Runtime/SteamHasAsyncResultAttributes.cs
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 00000000..bd99b379
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,17 @@
+{
+ // 使用 IntelliSense 了解相关属性。
+ // 悬停以查看现有属性的描述。
+ // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+
+ {
+ "name": "CodeGen",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "./Steamworks.NET_CodeGen.py",
+ "console": "integratedTerminal",
+ "cwd": "${workspaceFolder}/CodeGen/"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/CodeGen/src/interfaces.py b/CodeGen/src/interfaces.py
index c394a689..41d3586d 100644
--- a/CodeGen/src/interfaces.py
+++ b/CodeGen/src/interfaces.py
@@ -800,6 +800,23 @@ def parse_func(f, interface, func):
if c:
g_Output.append("\t\t/// " + c + "")
g_Output.append("\t\t/// ")
+
+ strAsyncType: str = None
+ strAsyncStruct: str = None
+
+ for attr in func.attributes:
+ if attr.name in ("STEAM_CALL_RESULT", "STEAM_CALL_BACK"):
+ if attr.name == "STEAM_CALL_RESULT":
+ strAsyncType = "CallResult"
+ elif attr.name == "STEAM_CALL_BACK":
+ strAsyncType = "Callback"
+ strAsyncStruct = attr.value
+
+
+ if strAsyncType is not None:
+ g_Output.append(f"\t\t[SteamHasAsync{strAsyncType}(typeof({strAsyncStruct}))]")
+
+
g_Output.append("\t\tpublic static " + wrapperreturntype + " " + func.name.rstrip("0") + "(" + wrapperargs + ") {")
g_Output.extend(functionBody)
diff --git a/com.rlabrecque.steamworks.net/Runtime/SteamHasAsyncResultAttributes.cs b/com.rlabrecque.steamworks.net/Runtime/SteamHasAsyncResultAttributes.cs
new file mode 100644
index 00000000..3e244367
--- /dev/null
+++ b/com.rlabrecque.steamworks.net/Runtime/SteamHasAsyncResultAttributes.cs
@@ -0,0 +1,56 @@
+// This file is provided under The MIT License as part of Steamworks.NET.
+// Copyright (c) 2013-2022 Riley Labrecque
+// Please see the included LICENSE.txt for additional information.
+
+// This file is automatically generated.
+// Changes to this file will be reverted when you update Steamworks.NET
+
+#if !(UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX)
+#define DISABLESTEAMWORKS
+#endif
+
+#if !DISABLESTEAMWORKS
+
+namespace Steamworks {
+ ///
+ /// Inform invokers use to receive async result.
+ ///
+ [System.AttributeUsage(System.AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
+ public sealed class SteamHasAsyncCallResultAttribute : System.Attribute {
+ private System.Type callbackType; // for vs project ignore suggestion IDE0044, I'm not sure if Unity supports readonly field
+
+ // See the attribute guidelines at
+ // http://go.microsoft.com/fwlink/?LinkId=85236
+
+ internal SteamHasAsyncCallResultAttribute(System.Type callbackType) {
+ this.callbackType = callbackType;
+ }
+
+ ///
+ /// Result type of the async operation.
+ ///
+ public System.Type CallbackType { get { return callbackType; } }
+ }
+
+ ///
+ /// Inform invokers use to receive async result.
+ ///
+ [System.AttributeUsage(System.AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
+ public sealed class SteamHasAsyncCallbackAttribute : System.Attribute {
+ private System.Type callbackType; // for vs project ignore suggestion IDE0044, I'm not sure if Unity supports readonly field
+
+ // See the attribute guidelines at
+ // http://go.microsoft.com/fwlink/?LinkId=85236
+
+ internal SteamHasAsyncCallbackAttribute(System.Type callbackType) {
+ this.callbackType = callbackType;
+ }
+
+ ///
+ /// Result type of the async operation.
+ ///
+ public System.Type CallbackType { get { return callbackType; } }
+ }
+}
+
+#endif // !DISABLESTEAMWORKS
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamapps.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamapps.cs
index b33bf5bb..657141f5 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamapps.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamapps.cs
@@ -223,6 +223,7 @@ public static void RequestAllProofOfPurchaseKeys() {
NativeMethods.ISteamApps_RequestAllProofOfPurchaseKeys(CSteamAPIContext.GetSteamApps());
}
+ [SteamHasAsyncCallResult(typeof(FileDetailsResult_t))]
public static SteamAPICall_t GetFileDetails(string pszFileName) {
InteropHelp.TestIfAvailableClient();
using (var pszFileName2 = new InteropHelp.UTF8StringHandle(pszFileName)) {
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamfriends.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamfriends.cs
index 025a6ec5..f18b2d6b 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamfriends.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamfriends.cs
@@ -35,6 +35,7 @@ public static string GetPersonaName() {
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(SetPersonaNameResponse_t))]
public static SteamAPICall_t SetPersonaName(string pchPersonaName) {
InteropHelp.TestIfAvailableClient();
using (var pchPersonaName2 = new InteropHelp.UTF8StringHandle(pchPersonaName)) {
@@ -215,6 +216,7 @@ public static bool GetClanActivityCounts(CSteamID steamIDClan, out int pnOnline,
///
/// 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
///
+ [SteamHasAsyncCallResult(typeof(DownloadClanActivityCountsResult_t))]
public static SteamAPICall_t DownloadClanActivityCounts(CSteamID[] psteamIDClans, int cClansToRequest) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamFriends_DownloadClanActivityCounts(CSteamAPIContext.GetSteamFriends(), psteamIDClans, cClansToRequest);
@@ -365,6 +367,7 @@ public static bool RequestUserInformation(CSteamID steamIDUser, bool bRequireNam
/// 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
///
+ [SteamHasAsyncCallResult(typeof(ClanOfficerListResponse_t))]
public static SteamAPICall_t RequestClanOfficerList(CSteamID steamIDClan) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamFriends_RequestClanOfficerList(CSteamAPIContext.GetSteamFriends(), steamIDClan);
@@ -504,6 +507,7 @@ public static AppId_t GetFriendCoplayGame(CSteamID steamIDFriend) {
/// 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
///
+ [SteamHasAsyncCallResult(typeof(JoinClanChatRoomCompletionResult_t))]
public static SteamAPICall_t JoinClanChatRoom(CSteamID steamIDClan) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamFriends_JoinClanChatRoom(CSteamAPIContext.GetSteamFriends(), steamIDClan);
@@ -591,16 +595,19 @@ public static int GetFriendMessage(CSteamID steamIDFriend, int iMessageID, out s
///
/// following apis
///
+ [SteamHasAsyncCallResult(typeof(FriendsGetFollowerCount_t))]
public static SteamAPICall_t GetFollowerCount(CSteamID steamID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamFriends_GetFollowerCount(CSteamAPIContext.GetSteamFriends(), steamID);
}
+ [SteamHasAsyncCallResult(typeof(FriendsIsFollowing_t))]
public static SteamAPICall_t IsFollowing(CSteamID steamID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamFriends_IsFollowing(CSteamAPIContext.GetSteamFriends(), steamID);
}
+ [SteamHasAsyncCallResult(typeof(FriendsEnumerateFollowingList_t))]
public static SteamAPICall_t EnumerateFollowingList(uint unStartIndex) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamFriends_EnumerateFollowingList(CSteamAPIContext.GetSteamFriends(), unStartIndex);
@@ -663,6 +670,7 @@ public static void ActivateGameOverlayInviteDialogConnectString(string pchConnec
/// Steam Community items equipped by a user on their profile
/// You can register for EquippedProfileItemsChanged_t to know when a friend has changed their equipped profile items
///
+ [SteamHasAsyncCallResult(typeof(EquippedProfileItems_t))]
public static SteamAPICall_t RequestEquippedProfileItems(CSteamID steamID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamFriends_RequestEquippedProfileItems(CSteamAPIContext.GetSteamFriends(), steamID);
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserver.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserver.cs
index 2a6692bd..e5896572 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserver.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserver.cs
@@ -334,6 +334,7 @@ public static void GetGameplayStats() {
NativeMethods.ISteamGameServer_GetGameplayStats(CSteamGameServerAPIContext.GetSteamGameServer());
}
+ [SteamHasAsyncCallResult(typeof(GSReputation_t))]
public static SteamAPICall_t GetServerReputation() {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamGameServer_GetServerReputation(CSteamGameServerAPIContext.GetSteamGameServer());
@@ -380,6 +381,7 @@ public static int GetNextOutgoingPacket(byte[] pOut, int cbMaxOut, out uint pNet
/// Server clan association
/// associate this game server with this clan for the purposes of computing player compat
///
+ [SteamHasAsyncCallResult(typeof(AssociateWithClanResult_t))]
public static SteamAPICall_t AssociateWithClan(CSteamID steamIDClan) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamGameServer_AssociateWithClan(CSteamGameServerAPIContext.GetSteamGameServer(), steamIDClan);
@@ -388,6 +390,7 @@ public static SteamAPICall_t AssociateWithClan(CSteamID steamIDClan) {
///
/// ask if any of the current players dont want to play with this new player - or vice versa
///
+ [SteamHasAsyncCallResult(typeof(ComputeNewPlayerCompatibilityResult_t))]
public static SteamAPICall_t ComputeNewPlayerCompatibility(CSteamID steamIDNewPlayer) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamGameServer_ComputeNewPlayerCompatibility(CSteamGameServerAPIContext.GetSteamGameServer(), steamIDNewPlayer);
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverinventory.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverinventory.cs
index 608216bd..3c2c7a6e 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverinventory.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverinventory.cs
@@ -336,6 +336,7 @@ public static bool GetItemDefinitionProperty(SteamItemDef_t iDefinition, string
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(SteamInventoryEligiblePromoItemDefIDs_t))]
public static SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs(CSteamID steamID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(CSteamGameServerAPIContext.GetSteamInventory(), steamID);
@@ -360,6 +361,7 @@ public static bool GetEligiblePromoItemDefinitionIDs(CSteamID steamID, SteamItem
/// Once the purchase has been authorized and completed by the user, the callback SteamInventoryResultReady_t
/// will be posted.
///
+ [SteamHasAsyncCallResult(typeof(SteamInventoryStartPurchaseResult_t))]
public static SteamAPICall_t StartPurchase(SteamItemDef_t[] pArrayItemDefs, uint[] punArrayQuantity, uint unArrayLength) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamInventory_StartPurchase(CSteamGameServerAPIContext.GetSteamInventory(), pArrayItemDefs, punArrayQuantity, unArrayLength);
@@ -368,6 +370,7 @@ public static SteamAPICall_t StartPurchase(SteamItemDef_t[] pArrayItemDefs, uint
///
/// Request current prices for all applicable item definitions
///
+ [SteamHasAsyncCallResult(typeof(SteamInventoryRequestPricesResult_t))]
public static SteamAPICall_t RequestPrices() {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamInventory_RequestPrices(CSteamGameServerAPIContext.GetSteamInventory());
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverstats.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverstats.cs
index 9899f720..022804d3 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverstats.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverstats.cs
@@ -23,6 +23,7 @@ public static class SteamGameServerStats {
/// 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
///
+ [SteamHasAsyncCallResult(typeof(GSStatsReceived_t))]
public static SteamAPICall_t RequestUserStats(CSteamID steamIDUser) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamGameServerStats_RequestUserStats(CSteamGameServerAPIContext.GetSteamGameServerStats(), steamIDUser);
@@ -100,6 +101,7 @@ public static bool ClearUserAchievement(CSteamID steamIDUser, string pchName) {
/// or were out of date. In this case the server sends back updated values.
/// The stats should be re-iterated to keep in sync.
///
+ [SteamHasAsyncCallResult(typeof(GSStatsStored_t))]
public static SteamAPICall_t StoreUserStats(CSteamID steamIDUser) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamGameServerStats_StoreUserStats(CSteamGameServerAPIContext.GetSteamGameServerStats(), steamIDUser);
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverugc.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverugc.cs
index f23dc93d..a9238855 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverugc.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverugc.cs
@@ -53,6 +53,7 @@ public static UGCQueryHandle_t CreateQueryUGCDetailsRequest(PublishedFileId_t[]
///
/// Send the query to Steam
///
+ [SteamHasAsyncCallResult(typeof(SteamUGCQueryCompleted_t))]
public static SteamAPICall_t SendQueryUGCRequest(UGCQueryHandle_t handle) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_SendQueryUGCRequest(CSteamGameServerAPIContext.GetSteamUGC(), handle);
@@ -337,6 +338,7 @@ public static bool AddRequiredKeyValueTag(UGCQueryHandle_t handle, string pKey,
///
/// DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
///
+ [SteamHasAsyncCallResult(typeof(SteamUGCRequestUGCDetailsResult_t))]
public static SteamAPICall_t RequestUGCDetails(PublishedFileId_t nPublishedFileID, uint unMaxAgeSeconds) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RequestUGCDetails(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID, unMaxAgeSeconds);
@@ -346,6 +348,7 @@ public static SteamAPICall_t RequestUGCDetails(PublishedFileId_t nPublishedFileI
/// Steam Workshop Creator API
/// create new item for this app with no content attached yet
///
+ [SteamHasAsyncCallResult(typeof(CreateItemResult_t))]
public static SteamAPICall_t CreateItem(AppId_t nConsumerAppId, EWorkshopFileType eFileType) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_CreateItem(CSteamGameServerAPIContext.GetSteamUGC(), nConsumerAppId, eFileType);
@@ -544,6 +547,7 @@ public static bool SetRequiredGameVersions(UGCUpdateHandle_t handle, string pszG
///
/// commit update process started with StartItemUpdate()
///
+ [SteamHasAsyncCallResult(typeof(SubmitItemUpdateResult_t))]
public static SteamAPICall_t SubmitItemUpdate(UGCUpdateHandle_t handle, string pchChangeNote) {
InteropHelp.TestIfAvailableGameServer();
using (var pchChangeNote2 = new InteropHelp.UTF8StringHandle(pchChangeNote)) {
@@ -559,21 +563,25 @@ public static EItemUpdateStatus GetItemUpdateProgress(UGCUpdateHandle_t handle,
///
/// Steam Workshop Consumer API
///
+ [SteamHasAsyncCallResult(typeof(SetUserItemVoteResult_t))]
public static SteamAPICall_t SetUserItemVote(PublishedFileId_t nPublishedFileID, bool bVoteUp) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_SetUserItemVote(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID, bVoteUp);
}
+ [SteamHasAsyncCallResult(typeof(GetUserItemVoteResult_t))]
public static SteamAPICall_t GetUserItemVote(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_GetUserItemVote(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID);
}
+ [SteamHasAsyncCallResult(typeof(UserFavoriteItemsListChanged_t))]
public static SteamAPICall_t AddItemToFavorites(AppId_t nAppId, PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_AddItemToFavorites(CSteamGameServerAPIContext.GetSteamUGC(), nAppId, nPublishedFileID);
}
+ [SteamHasAsyncCallResult(typeof(UserFavoriteItemsListChanged_t))]
public static SteamAPICall_t RemoveItemFromFavorites(AppId_t nAppId, PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RemoveItemFromFavorites(CSteamGameServerAPIContext.GetSteamUGC(), nAppId, nPublishedFileID);
@@ -582,6 +590,7 @@ public static SteamAPICall_t RemoveItemFromFavorites(AppId_t nAppId, PublishedFi
///
/// subscribe to this item, will be installed ASAP
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageSubscribePublishedFileResult_t))]
public static SteamAPICall_t SubscribeItem(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_SubscribeItem(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -590,6 +599,7 @@ public static SteamAPICall_t SubscribeItem(PublishedFileId_t nPublishedFileID) {
///
/// unsubscribe from this item, will be uninstalled after game quits
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageUnsubscribePublishedFileResult_t))]
public static SteamAPICall_t UnsubscribeItem(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_UnsubscribeItem(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -672,16 +682,19 @@ public static void SuspendDownloads(bool bSuspend) {
///
/// usage tracking
///
+ [SteamHasAsyncCallResult(typeof(StartPlaytimeTrackingResult_t))]
public static SteamAPICall_t StartPlaytimeTracking(PublishedFileId_t[] pvecPublishedFileID, uint unNumPublishedFileIDs) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_StartPlaytimeTracking(CSteamGameServerAPIContext.GetSteamUGC(), pvecPublishedFileID, unNumPublishedFileIDs);
}
+ [SteamHasAsyncCallResult(typeof(StopPlaytimeTrackingResult_t))]
public static SteamAPICall_t StopPlaytimeTracking(PublishedFileId_t[] pvecPublishedFileID, uint unNumPublishedFileIDs) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_StopPlaytimeTracking(CSteamGameServerAPIContext.GetSteamUGC(), pvecPublishedFileID, unNumPublishedFileIDs);
}
+ [SteamHasAsyncCallResult(typeof(StopPlaytimeTrackingResult_t))]
public static SteamAPICall_t StopPlaytimeTrackingForAllItems() {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_StopPlaytimeTrackingForAllItems(CSteamGameServerAPIContext.GetSteamUGC());
@@ -690,11 +703,13 @@ public static SteamAPICall_t StopPlaytimeTrackingForAllItems() {
///
/// parent-child relationship or dependency management
///
+ [SteamHasAsyncCallResult(typeof(AddUGCDependencyResult_t))]
public static SteamAPICall_t AddDependency(PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_AddDependency(CSteamGameServerAPIContext.GetSteamUGC(), nParentPublishedFileID, nChildPublishedFileID);
}
+ [SteamHasAsyncCallResult(typeof(RemoveUGCDependencyResult_t))]
public static SteamAPICall_t RemoveDependency(PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RemoveDependency(CSteamGameServerAPIContext.GetSteamUGC(), nParentPublishedFileID, nChildPublishedFileID);
@@ -703,11 +718,13 @@ public static SteamAPICall_t RemoveDependency(PublishedFileId_t nParentPublished
///
/// add/remove app dependence/requirements (usually DLC)
///
+ [SteamHasAsyncCallResult(typeof(AddAppDependencyResult_t))]
public static SteamAPICall_t AddAppDependency(PublishedFileId_t nPublishedFileID, AppId_t nAppID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_AddAppDependency(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID, nAppID);
}
+ [SteamHasAsyncCallResult(typeof(RemoveAppDependencyResult_t))]
public static SteamAPICall_t RemoveAppDependency(PublishedFileId_t nPublishedFileID, AppId_t nAppID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RemoveAppDependency(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID, nAppID);
@@ -717,6 +734,7 @@ public static SteamAPICall_t RemoveAppDependency(PublishedFileId_t nPublishedFil
/// request app dependencies. note that whatever callback you register for GetAppDependenciesResult_t may be called multiple times
/// until all app dependencies have been returned
///
+ [SteamHasAsyncCallResult(typeof(GetAppDependenciesResult_t))]
public static SteamAPICall_t GetAppDependencies(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_GetAppDependencies(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -725,6 +743,7 @@ public static SteamAPICall_t GetAppDependencies(PublishedFileId_t nPublishedFile
///
/// delete the item without prompting the user
///
+ [SteamHasAsyncCallResult(typeof(DeleteItemResult_t))]
public static SteamAPICall_t DeleteItem(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_DeleteItem(CSteamGameServerAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -741,6 +760,7 @@ public static bool ShowWorkshopEULA() {
///
/// Retrieve information related to the user's acceptance or not of the app's specific Workshop EULA
///
+ [SteamHasAsyncCallResult(typeof(WorkshopEULAStatus_t))]
public static SteamAPICall_t GetWorkshopEULAStatus() {
InteropHelp.TestIfAvailableGameServer();
return (SteamAPICall_t)NativeMethods.ISteamUGC_GetWorkshopEULAStatus(CSteamGameServerAPIContext.GetSteamUGC());
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverutils.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverutils.cs
index 378006e2..5e5e0bae 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverutils.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamgameserverutils.cs
@@ -172,6 +172,7 @@ public static bool BOverlayNeedsPresent() {
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(CheckFileSignature_t))]
public static SteamAPICall_t CheckFileSignature(string szFileName) {
InteropHelp.TestIfAvailableGameServer();
using (var szFileName2 = new InteropHelp.UTF8StringHandle(szFileName)) {
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamhtmlsurface.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamhtmlsurface.cs
index cc564262..31b130f8 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamhtmlsurface.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamhtmlsurface.cs
@@ -42,6 +42,7 @@ public static bool Shutdown() {
/// not implement these callback handlers, the browser may appear to hang instead of
/// navigating to new pages or triggering javascript popups.
///
+ [SteamHasAsyncCallResult(typeof(HTML_BrowserReady_t))]
public static SteamAPICall_t CreateBrowser(string pchUserAgent, string pchUserCSS) {
InteropHelp.TestIfAvailableClient();
using (var pchUserAgent2 = new InteropHelp.UTF8StringHandle(pchUserAgent))
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminput.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminput.cs
index 08ca24f4..cc2366c3 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminput.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminput.cs
@@ -99,6 +99,7 @@ public static int GetConnectedControllers(InputHandle_t[] handlesOut) {
/// Each controller that is already connected will generate a device connected
/// callback when you enable them
///
+ [SteamHasAsyncCallback(typeof(SteamInputConfigurationLoaded_t))]
public static void EnableDeviceCallbacks() {
InteropHelp.TestIfAvailableClient();
NativeMethods.ISteamInput_EnableDeviceCallbacks(CSteamAPIContext.GetSteamInput());
@@ -117,6 +118,7 @@ public static void EnableDeviceCallbacks() {
/// for lower latency than standard Steam callbacks. Supports one callback at a time.
/// Note: this is called within either SteamInput()->RunFrame or by SteamAPI_RunCallbacks
///
+ [SteamHasAsyncCallback(typeof(SteamInputGamepadSlotChange_t))]
public static void EnableActionEventCallbacks(SteamInputActionEventCallbackPointer pCallback) {
InteropHelp.TestIfAvailableClient();
NativeMethods.ISteamInput_EnableActionEventCallbacks(CSteamAPIContext.GetSteamInput(), pCallback);
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminventory.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminventory.cs
index a86d6c80..4f7b310d 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminventory.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteaminventory.cs
@@ -336,6 +336,7 @@ public static bool GetItemDefinitionProperty(SteamItemDef_t iDefinition, string
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(SteamInventoryEligiblePromoItemDefIDs_t))]
public static SteamAPICall_t RequestEligiblePromoItemDefinitionsIDs(CSteamID steamID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamInventory_RequestEligiblePromoItemDefinitionsIDs(CSteamAPIContext.GetSteamInventory(), steamID);
@@ -360,6 +361,7 @@ public static bool GetEligiblePromoItemDefinitionIDs(CSteamID steamID, SteamItem
/// Once the purchase has been authorized and completed by the user, the callback SteamInventoryResultReady_t
/// will be posted.
///
+ [SteamHasAsyncCallResult(typeof(SteamInventoryStartPurchaseResult_t))]
public static SteamAPICall_t StartPurchase(SteamItemDef_t[] pArrayItemDefs, uint[] punArrayQuantity, uint unArrayLength) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamInventory_StartPurchase(CSteamAPIContext.GetSteamInventory(), pArrayItemDefs, punArrayQuantity, unArrayLength);
@@ -368,6 +370,7 @@ public static SteamAPICall_t StartPurchase(SteamItemDef_t[] pArrayItemDefs, uint
///
/// Request current prices for all applicable item definitions
///
+ [SteamHasAsyncCallResult(typeof(SteamInventoryRequestPricesResult_t))]
public static SteamAPICall_t RequestPrices() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamInventory_RequestPrices(CSteamAPIContext.GetSteamInventory());
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteammatchmaking.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteammatchmaking.cs
index 5945345f..bfecd7fa 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteammatchmaking.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteammatchmaking.cs
@@ -78,6 +78,7 @@ public static bool RemoveFavoriteGame(AppId_t nAppID, uint nIP, ushort nConnPort
/// }
/// }
///
+ [SteamHasAsyncCallResult(typeof(LobbyMatchList_t))]
public static SteamAPICall_t RequestLobbyList() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamMatchmaking_RequestLobbyList(CSteamAPIContext.GetSteamMatchmaking());
@@ -164,6 +165,7 @@ public static CSteamID GetLobbyByIndex(int iLobby) {
/// 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)
///
+ [SteamHasAsyncCallResult(typeof(LobbyCreated_t))]
public static SteamAPICall_t CreateLobby(ELobbyType eLobbyType, int cMaxMembers) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamMatchmaking_CreateLobby(CSteamAPIContext.GetSteamMatchmaking(), eLobbyType, cMaxMembers);
@@ -175,6 +177,7 @@ public static SteamAPICall_t CreateLobby(ELobbyType eLobbyType, int cMaxMembers)
/// 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
///
+ [SteamHasAsyncCallResult(typeof(LobbyEnter_t))]
public static SteamAPICall_t JoinLobby(CSteamID steamIDLobby) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamMatchmaking_JoinLobby(CSteamAPIContext.GetSteamMatchmaking(), steamIDLobby);
@@ -804,6 +807,7 @@ public static bool GetBeaconDetails(PartyBeaconID_t ulBeaconID, out CSteamID pSt
/// Join an open party. Steam will reserve one beacon slot for your SteamID,
/// and return the necessary JoinGame string for you to use to connect
///
+ [SteamHasAsyncCallResult(typeof(JoinPartyCallback_t))]
public static SteamAPICall_t JoinParty(PartyBeaconID_t ulBeaconID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamParties_JoinParty(CSteamAPIContext.GetSteamParties(), ulBeaconID);
@@ -830,6 +834,7 @@ public static bool GetAvailableBeaconLocations(SteamPartyBeaconLocation_t[] pLoc
/// When people begin responding to your beacon, Steam will send you
/// PartyReservationCallback_t callbacks to let you know who is on the way.
///
+ [SteamHasAsyncCallResult(typeof(CreateBeaconCallback_t))]
public static SteamAPICall_t CreateBeacon(uint unOpenSlots, ref SteamPartyBeaconLocation_t pBeaconLocation, string pchConnectString, string pchMetadata) {
InteropHelp.TestIfAvailableClient();
using (var pchConnectString2 = new InteropHelp.UTF8StringHandle(pchConnectString))
@@ -862,6 +867,7 @@ public static void CancelReservation(PartyBeaconID_t ulBeacon, CSteamID steamIDU
/// Change the number of open beacon reservation slots.
/// Call this if, for example, someone without a reservation joins your party (eg a friend, or via your own matchmaking system).
///
+ [SteamHasAsyncCallResult(typeof(ChangeNumOpenSlotsCallback_t))]
public static SteamAPICall_t ChangeNumOpenSlots(PartyBeaconID_t ulBeacon, uint unOpenSlots) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamParties_ChangeNumOpenSlots(CSteamAPIContext.GetSteamParties(), ulBeacon, unOpenSlots);
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamremotestorage.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamremotestorage.cs
index 7bc699b3..5361af31 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamremotestorage.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamremotestorage.cs
@@ -37,6 +37,7 @@ public static int FileRead(string pchFile, byte[] pvData, int cubDataToRead) {
}
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageFileWriteAsyncComplete_t))]
public static SteamAPICall_t FileWriteAsync(string pchFile, byte[] pvData, uint cubData) {
InteropHelp.TestIfAvailableClient();
using (var pchFile2 = new InteropHelp.UTF8StringHandle(pchFile)) {
@@ -44,6 +45,7 @@ public static SteamAPICall_t FileWriteAsync(string pchFile, byte[] pvData, uint
}
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageFileReadAsyncComplete_t))]
public static SteamAPICall_t FileReadAsync(string pchFile, uint nOffset, uint cubToRead) {
InteropHelp.TestIfAvailableClient();
using (var pchFile2 = new InteropHelp.UTF8StringHandle(pchFile)) {
@@ -70,6 +72,7 @@ public static bool FileDelete(string pchFile) {
}
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageFileShareResult_t))]
public static SteamAPICall_t FileShare(string pchFile) {
InteropHelp.TestIfAvailableClient();
using (var pchFile2 = new InteropHelp.UTF8StringHandle(pchFile)) {
@@ -189,6 +192,7 @@ public static void SetCloudEnabledForApp(bool bEnabled) {
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageDownloadUGCResult_t))]
public static SteamAPICall_t UGCDownload(UGCHandle_t hContent, uint unPriority) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_UGCDownload(CSteamAPIContext.GetSteamRemoteStorage(), hContent, unPriority);
@@ -243,6 +247,7 @@ public static UGCHandle_t GetCachedUGCHandle(int iCachedContent) {
///
/// publishing UGC
///
+ [SteamHasAsyncCallResult(typeof(RemoteStoragePublishFileProgress_t))]
public static SteamAPICall_t PublishWorkshopFile(string pchFile, string pchPreviewFile, AppId_t nConsumerAppId, string pchTitle, string pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, System.Collections.Generic.IList pTags, EWorkshopFileType eWorkshopFileType) {
InteropHelp.TestIfAvailableClient();
using (var pchFile2 = new InteropHelp.UTF8StringHandle(pchFile))
@@ -296,6 +301,7 @@ public static bool UpdatePublishedFileTags(PublishedFileUpdateHandle_t updateHan
return NativeMethods.ISteamRemoteStorage_UpdatePublishedFileTags(CSteamAPIContext.GetSteamRemoteStorage(), updateHandle, new InteropHelp.SteamParamStringArray(pTags));
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageUpdatePublishedFileResult_t))]
public static SteamAPICall_t CommitPublishedFileUpdate(PublishedFileUpdateHandle_t updateHandle) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_CommitPublishedFileUpdate(CSteamAPIContext.GetSteamRemoteStorage(), updateHandle);
@@ -306,11 +312,13 @@ public static SteamAPICall_t CommitPublishedFileUpdate(PublishedFileUpdateHandle
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageGetPublishedFileDetailsResult_t))]
public static SteamAPICall_t GetPublishedFileDetails(PublishedFileId_t unPublishedFileId, uint unMaxSecondsOld) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_GetPublishedFileDetails(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId, unMaxSecondsOld);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageDeletePublishedFileResult_t))]
public static SteamAPICall_t DeletePublishedFile(PublishedFileId_t unPublishedFileId) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_DeletePublishedFile(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId);
@@ -319,21 +327,25 @@ public static SteamAPICall_t DeletePublishedFile(PublishedFileId_t unPublishedFi
///
/// enumerate the files that the current user published with this app
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageEnumerateUserPublishedFilesResult_t))]
public static SteamAPICall_t EnumerateUserPublishedFiles(uint unStartIndex) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_EnumerateUserPublishedFiles(CSteamAPIContext.GetSteamRemoteStorage(), unStartIndex);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageSubscribePublishedFileResult_t))]
public static SteamAPICall_t SubscribePublishedFile(PublishedFileId_t unPublishedFileId) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_SubscribePublishedFile(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageEnumerateUserSubscribedFilesResult_t))]
public static SteamAPICall_t EnumerateUserSubscribedFiles(uint unStartIndex) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_EnumerateUserSubscribedFiles(CSteamAPIContext.GetSteamRemoteStorage(), unStartIndex);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageUnsubscribePublishedFileResult_t))]
public static SteamAPICall_t UnsubscribePublishedFile(PublishedFileId_t unPublishedFileId) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_UnsubscribePublishedFile(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId);
@@ -346,26 +358,31 @@ public static bool UpdatePublishedFileSetChangeDescription(PublishedFileUpdateHa
}
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageGetPublishedItemVoteDetailsResult_t))]
public static SteamAPICall_t GetPublishedItemVoteDetails(PublishedFileId_t unPublishedFileId) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_GetPublishedItemVoteDetails(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageUpdateUserPublishedItemVoteResult_t))]
public static SteamAPICall_t UpdateUserPublishedItemVote(PublishedFileId_t unPublishedFileId, bool bVoteUp) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_UpdateUserPublishedItemVote(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId, bVoteUp);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageGetPublishedItemVoteDetailsResult_t))]
public static SteamAPICall_t GetUserPublishedItemVoteDetails(PublishedFileId_t unPublishedFileId) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_GetUserPublishedItemVoteDetails(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageEnumerateUserPublishedFilesResult_t))]
public static SteamAPICall_t EnumerateUserSharedWorkshopFiles(CSteamID steamId, uint unStartIndex, System.Collections.Generic.IList pRequiredTags, System.Collections.Generic.IList pExcludedTags) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_EnumerateUserSharedWorkshopFiles(CSteamAPIContext.GetSteamRemoteStorage(), steamId, unStartIndex, new InteropHelp.SteamParamStringArray(pRequiredTags), new InteropHelp.SteamParamStringArray(pExcludedTags));
}
+ [SteamHasAsyncCallResult(typeof(RemoteStoragePublishFileProgress_t))]
public static SteamAPICall_t PublishVideo(EWorkshopVideoProvider eVideoProvider, string pchVideoAccount, string pchVideoIdentifier, string pchPreviewFile, AppId_t nConsumerAppId, string pchTitle, string pchDescription, ERemoteStoragePublishedFileVisibility eVisibility, System.Collections.Generic.IList pTags) {
InteropHelp.TestIfAvailableClient();
using (var pchVideoAccount2 = new InteropHelp.UTF8StringHandle(pchVideoAccount))
@@ -377,11 +394,13 @@ public static SteamAPICall_t PublishVideo(EWorkshopVideoProvider eVideoProvider,
}
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageSetUserPublishedFileActionResult_t))]
public static SteamAPICall_t SetUserPublishedFileAction(PublishedFileId_t unPublishedFileId, EWorkshopFileAction eAction) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_SetUserPublishedFileAction(CSteamAPIContext.GetSteamRemoteStorage(), unPublishedFileId, eAction);
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageEnumeratePublishedFilesByUserActionResult_t))]
public static SteamAPICall_t EnumeratePublishedFilesByUserAction(EWorkshopFileAction eAction, uint unStartIndex) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_EnumeratePublishedFilesByUserAction(CSteamAPIContext.GetSteamRemoteStorage(), eAction, unStartIndex);
@@ -390,11 +409,13 @@ public static SteamAPICall_t EnumeratePublishedFilesByUserAction(EWorkshopFileAc
///
/// this method enumerates the public view of workshop files
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageEnumerateWorkshopFilesResult_t))]
public static SteamAPICall_t EnumeratePublishedWorkshopFiles(EWorkshopEnumerationType eEnumerationType, uint unStartIndex, uint unCount, uint unDays, System.Collections.Generic.IList pTags, System.Collections.Generic.IList pUserTags) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamRemoteStorage_EnumeratePublishedWorkshopFiles(CSteamAPIContext.GetSteamRemoteStorage(), eEnumerationType, unStartIndex, unCount, unDays, new InteropHelp.SteamParamStringArray(pTags), new InteropHelp.SteamParamStringArray(pUserTags));
}
+ [SteamHasAsyncCallResult(typeof(RemoteStorageDownloadUGCResult_t))]
public static SteamAPICall_t UGCDownloadToLocation(UGCHandle_t hContent, string pchLocation, uint unPriority) {
InteropHelp.TestIfAvailableClient();
using (var pchLocation2 = new InteropHelp.UTF8StringHandle(pchLocation)) {
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamtimeline.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamtimeline.cs
index 46f73b36..43abc58f 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamtimeline.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamtimeline.cs
@@ -165,6 +165,7 @@ public static void RemoveTimelineEvent(TimelineEventHandle_t ulEvent) {
///
/// add a tag to whatever time range is represented by the event
///
+ [SteamHasAsyncCallResult(typeof(SteamTimelineEventRecordingExists_t))]
public static SteamAPICall_t DoesEventRecordingExist(TimelineEventHandle_t ulEvent) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamTimeline_DoesEventRecordingExist(CSteamAPIContext.GetSteamTimeline(), ulEvent);
@@ -222,6 +223,7 @@ public static void SetGamePhaseID(string pchPhaseID) {
}
}
+ [SteamHasAsyncCallResult(typeof(SteamTimelineGamePhaseRecordingExists_t))]
public static SteamAPICall_t DoesGamePhaseRecordingExist(string pchPhaseID) {
InteropHelp.TestIfAvailableClient();
using (var pchPhaseID2 = new InteropHelp.UTF8StringHandle(pchPhaseID)) {
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamugc.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamugc.cs
index 1e03ea35..c31df740 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamugc.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamugc.cs
@@ -53,6 +53,7 @@ public static UGCQueryHandle_t CreateQueryUGCDetailsRequest(PublishedFileId_t[]
///
/// Send the query to Steam
///
+ [SteamHasAsyncCallResult(typeof(SteamUGCQueryCompleted_t))]
public static SteamAPICall_t SendQueryUGCRequest(UGCQueryHandle_t handle) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_SendQueryUGCRequest(CSteamAPIContext.GetSteamUGC(), handle);
@@ -337,6 +338,7 @@ public static bool AddRequiredKeyValueTag(UGCQueryHandle_t handle, string pKey,
///
/// DEPRECATED - Use CreateQueryUGCDetailsRequest call above instead!
///
+ [SteamHasAsyncCallResult(typeof(SteamUGCRequestUGCDetailsResult_t))]
public static SteamAPICall_t RequestUGCDetails(PublishedFileId_t nPublishedFileID, uint unMaxAgeSeconds) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RequestUGCDetails(CSteamAPIContext.GetSteamUGC(), nPublishedFileID, unMaxAgeSeconds);
@@ -346,6 +348,7 @@ public static SteamAPICall_t RequestUGCDetails(PublishedFileId_t nPublishedFileI
/// Steam Workshop Creator API
/// create new item for this app with no content attached yet
///
+ [SteamHasAsyncCallResult(typeof(CreateItemResult_t))]
public static SteamAPICall_t CreateItem(AppId_t nConsumerAppId, EWorkshopFileType eFileType) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_CreateItem(CSteamAPIContext.GetSteamUGC(), nConsumerAppId, eFileType);
@@ -544,6 +547,7 @@ public static bool SetRequiredGameVersions(UGCUpdateHandle_t handle, string pszG
///
/// commit update process started with StartItemUpdate()
///
+ [SteamHasAsyncCallResult(typeof(SubmitItemUpdateResult_t))]
public static SteamAPICall_t SubmitItemUpdate(UGCUpdateHandle_t handle, string pchChangeNote) {
InteropHelp.TestIfAvailableClient();
using (var pchChangeNote2 = new InteropHelp.UTF8StringHandle(pchChangeNote)) {
@@ -559,21 +563,25 @@ public static EItemUpdateStatus GetItemUpdateProgress(UGCUpdateHandle_t handle,
///
/// Steam Workshop Consumer API
///
+ [SteamHasAsyncCallResult(typeof(SetUserItemVoteResult_t))]
public static SteamAPICall_t SetUserItemVote(PublishedFileId_t nPublishedFileID, bool bVoteUp) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_SetUserItemVote(CSteamAPIContext.GetSteamUGC(), nPublishedFileID, bVoteUp);
}
+ [SteamHasAsyncCallResult(typeof(GetUserItemVoteResult_t))]
public static SteamAPICall_t GetUserItemVote(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_GetUserItemVote(CSteamAPIContext.GetSteamUGC(), nPublishedFileID);
}
+ [SteamHasAsyncCallResult(typeof(UserFavoriteItemsListChanged_t))]
public static SteamAPICall_t AddItemToFavorites(AppId_t nAppId, PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_AddItemToFavorites(CSteamAPIContext.GetSteamUGC(), nAppId, nPublishedFileID);
}
+ [SteamHasAsyncCallResult(typeof(UserFavoriteItemsListChanged_t))]
public static SteamAPICall_t RemoveItemFromFavorites(AppId_t nAppId, PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RemoveItemFromFavorites(CSteamAPIContext.GetSteamUGC(), nAppId, nPublishedFileID);
@@ -582,6 +590,7 @@ public static SteamAPICall_t RemoveItemFromFavorites(AppId_t nAppId, PublishedFi
///
/// subscribe to this item, will be installed ASAP
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageSubscribePublishedFileResult_t))]
public static SteamAPICall_t SubscribeItem(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_SubscribeItem(CSteamAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -590,6 +599,7 @@ public static SteamAPICall_t SubscribeItem(PublishedFileId_t nPublishedFileID) {
///
/// unsubscribe from this item, will be uninstalled after game quits
///
+ [SteamHasAsyncCallResult(typeof(RemoteStorageUnsubscribePublishedFileResult_t))]
public static SteamAPICall_t UnsubscribeItem(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_UnsubscribeItem(CSteamAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -672,16 +682,19 @@ public static void SuspendDownloads(bool bSuspend) {
///
/// usage tracking
///
+ [SteamHasAsyncCallResult(typeof(StartPlaytimeTrackingResult_t))]
public static SteamAPICall_t StartPlaytimeTracking(PublishedFileId_t[] pvecPublishedFileID, uint unNumPublishedFileIDs) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_StartPlaytimeTracking(CSteamAPIContext.GetSteamUGC(), pvecPublishedFileID, unNumPublishedFileIDs);
}
+ [SteamHasAsyncCallResult(typeof(StopPlaytimeTrackingResult_t))]
public static SteamAPICall_t StopPlaytimeTracking(PublishedFileId_t[] pvecPublishedFileID, uint unNumPublishedFileIDs) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_StopPlaytimeTracking(CSteamAPIContext.GetSteamUGC(), pvecPublishedFileID, unNumPublishedFileIDs);
}
+ [SteamHasAsyncCallResult(typeof(StopPlaytimeTrackingResult_t))]
public static SteamAPICall_t StopPlaytimeTrackingForAllItems() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_StopPlaytimeTrackingForAllItems(CSteamAPIContext.GetSteamUGC());
@@ -690,11 +703,13 @@ public static SteamAPICall_t StopPlaytimeTrackingForAllItems() {
///
/// parent-child relationship or dependency management
///
+ [SteamHasAsyncCallResult(typeof(AddUGCDependencyResult_t))]
public static SteamAPICall_t AddDependency(PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_AddDependency(CSteamAPIContext.GetSteamUGC(), nParentPublishedFileID, nChildPublishedFileID);
}
+ [SteamHasAsyncCallResult(typeof(RemoveUGCDependencyResult_t))]
public static SteamAPICall_t RemoveDependency(PublishedFileId_t nParentPublishedFileID, PublishedFileId_t nChildPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RemoveDependency(CSteamAPIContext.GetSteamUGC(), nParentPublishedFileID, nChildPublishedFileID);
@@ -703,11 +718,13 @@ public static SteamAPICall_t RemoveDependency(PublishedFileId_t nParentPublished
///
/// add/remove app dependence/requirements (usually DLC)
///
+ [SteamHasAsyncCallResult(typeof(AddAppDependencyResult_t))]
public static SteamAPICall_t AddAppDependency(PublishedFileId_t nPublishedFileID, AppId_t nAppID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_AddAppDependency(CSteamAPIContext.GetSteamUGC(), nPublishedFileID, nAppID);
}
+ [SteamHasAsyncCallResult(typeof(RemoveAppDependencyResult_t))]
public static SteamAPICall_t RemoveAppDependency(PublishedFileId_t nPublishedFileID, AppId_t nAppID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_RemoveAppDependency(CSteamAPIContext.GetSteamUGC(), nPublishedFileID, nAppID);
@@ -717,6 +734,7 @@ public static SteamAPICall_t RemoveAppDependency(PublishedFileId_t nPublishedFil
/// request app dependencies. note that whatever callback you register for GetAppDependenciesResult_t may be called multiple times
/// until all app dependencies have been returned
///
+ [SteamHasAsyncCallResult(typeof(GetAppDependenciesResult_t))]
public static SteamAPICall_t GetAppDependencies(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_GetAppDependencies(CSteamAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -725,6 +743,7 @@ public static SteamAPICall_t GetAppDependencies(PublishedFileId_t nPublishedFile
///
/// delete the item without prompting the user
///
+ [SteamHasAsyncCallResult(typeof(DeleteItemResult_t))]
public static SteamAPICall_t DeleteItem(PublishedFileId_t nPublishedFileID) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_DeleteItem(CSteamAPIContext.GetSteamUGC(), nPublishedFileID);
@@ -741,6 +760,7 @@ public static bool ShowWorkshopEULA() {
///
/// Retrieve information related to the user's acceptance or not of the app's specific Workshop EULA
///
+ [SteamHasAsyncCallResult(typeof(WorkshopEULAStatus_t))]
public static SteamAPICall_t GetWorkshopEULAStatus() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUGC_GetWorkshopEULAStatus(CSteamAPIContext.GetSteamUGC());
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuser.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuser.cs
index 7fff6ace..c69b088b 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuser.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuser.cs
@@ -266,6 +266,7 @@ public static void AdvertiseGame(CSteamID steamIDGameServer, uint unIPServer, us
/// pDataToInclude, cbDataToInclude will be encrypted into the ticket
/// ( This is asynchronous, you must wait for the ticket to be completed by the server )
///
+ [SteamHasAsyncCallResult(typeof(EncryptedAppTicketResponse_t))]
public static SteamAPICall_t RequestEncryptedAppTicket(byte[] pDataToInclude, int cbDataToInclude) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUser_RequestEncryptedAppTicket(CSteamAPIContext.GetSteamUser(), pDataToInclude, cbDataToInclude);
@@ -314,6 +315,7 @@ public static int GetPlayerSteamLevel() {
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(StoreAuthURLResponse_t))]
public static SteamAPICall_t RequestStoreAuthURL(string pchRedirectURL) {
InteropHelp.TestIfAvailableClient();
using (var pchRedirectURL2 = new InteropHelp.UTF8StringHandle(pchRedirectURL)) {
@@ -353,6 +355,7 @@ public static bool BIsPhoneRequiringVerification() {
return NativeMethods.ISteamUser_BIsPhoneRequiringVerification(CSteamAPIContext.GetSteamUser());
}
+ [SteamHasAsyncCallResult(typeof(MarketEligibilityResponse_t))]
public static SteamAPICall_t GetMarketEligibility() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUser_GetMarketEligibility(CSteamAPIContext.GetSteamUser());
@@ -361,6 +364,7 @@ public static SteamAPICall_t GetMarketEligibility() {
///
/// Retrieves anti indulgence / duration control for current user
///
+ [SteamHasAsyncCallResult(typeof(DurationControl_t))]
public static SteamAPICall_t GetDurationControl() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUser_GetDurationControl(CSteamAPIContext.GetSteamUser());
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuserstats.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuserstats.cs
index 2a8811e6..7bc0f875 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuserstats.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamuserstats.cs
@@ -172,6 +172,7 @@ public static string GetAchievementName(uint iAchievement) {
/// 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
///
+ [SteamHasAsyncCallResult(typeof(UserStatsReceived_t))]
public static SteamAPICall_t RequestUserStats(CSteamID steamIDUser) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_RequestUserStats(CSteamAPIContext.GetSteamUserStats(), steamIDUser);
@@ -224,6 +225,7 @@ public static bool ResetAllStats(bool bAchievementsToo) {
/// 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
///
+ [SteamHasAsyncCallResult(typeof(LeaderboardFindResult_t))]
public static SteamAPICall_t FindOrCreateLeaderboard(string pchLeaderboardName, ELeaderboardSortMethod eLeaderboardSortMethod, ELeaderboardDisplayType eLeaderboardDisplayType) {
InteropHelp.TestIfAvailableClient();
using (var pchLeaderboardName2 = new InteropHelp.UTF8StringHandle(pchLeaderboardName)) {
@@ -235,6 +237,7 @@ public static SteamAPICall_t FindOrCreateLeaderboard(string pchLeaderboardName,
/// as above, but won't create the leaderboard if it's not found
/// This call is asynchronous, with the result returned in LeaderboardFindResult_t
///
+ [SteamHasAsyncCallResult(typeof(LeaderboardFindResult_t))]
public static SteamAPICall_t FindLeaderboard(string pchLeaderboardName) {
InteropHelp.TestIfAvailableClient();
using (var pchLeaderboardName2 = new InteropHelp.UTF8StringHandle(pchLeaderboardName)) {
@@ -284,6 +287,7 @@ public static ELeaderboardDisplayType GetLeaderboardDisplayType(SteamLeaderboard
/// 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
///
+ [SteamHasAsyncCallResult(typeof(LeaderboardScoresDownloaded_t))]
public static SteamAPICall_t DownloadLeaderboardEntries(SteamLeaderboard_t hSteamLeaderboard, ELeaderboardDataRequest eLeaderboardDataRequest, int nRangeStart, int nRangeEnd) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_DownloadLeaderboardEntries(CSteamAPIContext.GetSteamUserStats(), hSteamLeaderboard, eLeaderboardDataRequest, nRangeStart, nRangeEnd);
@@ -294,6 +298,7 @@ public static SteamAPICall_t DownloadLeaderboardEntries(SteamLeaderboard_t hStea
/// 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
///
+ [SteamHasAsyncCallResult(typeof(LeaderboardScoresDownloaded_t))]
public static SteamAPICall_t DownloadLeaderboardEntriesForUsers(SteamLeaderboard_t hSteamLeaderboard, CSteamID[] prgUsers, int cUsers) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_DownloadLeaderboardEntriesForUsers(CSteamAPIContext.GetSteamUserStats(), hSteamLeaderboard, prgUsers, cUsers);
@@ -326,6 +331,7 @@ public static bool GetDownloadedLeaderboardEntry(SteamLeaderboardEntries_t hStea
/// 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
///
+ [SteamHasAsyncCallResult(typeof(LeaderboardScoreUploaded_t))]
public static SteamAPICall_t UploadLeaderboardScore(SteamLeaderboard_t hSteamLeaderboard, ELeaderboardUploadScoreMethod eLeaderboardUploadScoreMethod, int nScore, int[] pScoreDetails, int cScoreDetailsCount) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_UploadLeaderboardScore(CSteamAPIContext.GetSteamUserStats(), hSteamLeaderboard, eLeaderboardUploadScoreMethod, nScore, pScoreDetails, cScoreDetailsCount);
@@ -336,6 +342,7 @@ public static SteamAPICall_t UploadLeaderboardScore(SteamLeaderboard_t hSteamLea
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(LeaderboardUGCSet_t))]
public static SteamAPICall_t AttachLeaderboardUGC(SteamLeaderboard_t hSteamLeaderboard, UGCHandle_t hUGC) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_AttachLeaderboardUGC(CSteamAPIContext.GetSteamUserStats(), hSteamLeaderboard, hUGC);
@@ -345,6 +352,7 @@ public static SteamAPICall_t AttachLeaderboardUGC(SteamLeaderboard_t hSteamLeade
/// Retrieves the number of players currently playing your game (online + offline)
/// This call is asynchronous, with the result returned in NumberOfCurrentPlayers_t
///
+ [SteamHasAsyncCallResult(typeof(NumberOfCurrentPlayers_t))]
public static SteamAPICall_t GetNumberOfCurrentPlayers() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_GetNumberOfCurrentPlayers(CSteamAPIContext.GetSteamUserStats());
@@ -355,6 +363,7 @@ public static SteamAPICall_t GetNumberOfCurrentPlayers() {
/// for the game globally.
/// This call is asynchronous, with the result returned in GlobalAchievementPercentagesReady_t.
///
+ [SteamHasAsyncCallResult(typeof(GlobalAchievementPercentagesReady_t))]
public static SteamAPICall_t RequestGlobalAchievementPercentages() {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_RequestGlobalAchievementPercentages(CSteamAPIContext.GetSteamUserStats());
@@ -404,6 +413,7 @@ public static bool GetAchievementAchievedPercent(string pchName, out float pflPe
/// nHistoryDays specifies how many days of day-by-day history to retrieve in addition
/// to the overall totals. The limit is 60.
///
+ [SteamHasAsyncCallResult(typeof(GlobalStatsReceived_t))]
public static SteamAPICall_t RequestGlobalStats(int nHistoryDays) {
InteropHelp.TestIfAvailableClient();
return (SteamAPICall_t)NativeMethods.ISteamUserStats_RequestGlobalStats(CSteamAPIContext.GetSteamUserStats(), nHistoryDays);
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamutils.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamutils.cs
index 005743fe..c5998ec5 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamutils.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamutils.cs
@@ -172,6 +172,7 @@ public static bool BOverlayNeedsPresent() {
/// 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.
///
+ [SteamHasAsyncCallResult(typeof(CheckFileSignature_t))]
public static SteamAPICall_t CheckFileSignature(string szFileName) {
InteropHelp.TestIfAvailableClient();
using (var szFileName2 = new InteropHelp.UTF8StringHandle(szFileName)) {
diff --git a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamvideo.cs b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamvideo.cs
index 451a6c1f..ae8062aa 100644
--- a/com.rlabrecque.steamworks.net/Runtime/autogen/isteamvideo.cs
+++ b/com.rlabrecque.steamworks.net/Runtime/autogen/isteamvideo.cs
@@ -35,6 +35,7 @@ public static bool IsBroadcasting(out int pnNumViewers) {
///
/// Get the OPF Details for 360 Video Playback
///
+ [SteamHasAsyncCallback(typeof(GetOPFSettingsResult_t))]
public static void GetOPFSettings(AppId_t unVideoAppID) {
InteropHelp.TestIfAvailableClient();
NativeMethods.ISteamVideo_GetOPFSettings(CSteamAPIContext.GetSteamVideo(), unVideoAppID);