diff --git a/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj b/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj
index 9ff3737..20a9a43 100644
--- a/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj
+++ b/Facepunch.Steamworks.Test/Facepunch.Steamworks.Test.csproj
@@ -92,6 +92,7 @@
+
diff --git a/Facepunch.Steamworks.Test/Server/Inventory.cs b/Facepunch.Steamworks.Test/Server/Inventory.cs
new file mode 100644
index 0000000..fdc8503
--- /dev/null
+++ b/Facepunch.Steamworks.Test/Server/Inventory.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Text;
+using System.Threading;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System.Linq;
+
+namespace Facepunch.Steamworks.Test
+{
+ public partial class Server
+ {
+ [TestMethod]
+ public void Invetory()
+ {
+ using ( var client = new Facepunch.Steamworks.Client( 252490 ) )
+ {
+ Assert.IsTrue( client.Valid );
+
+ Assert.IsNull( client.Inventory.SerializedItems );
+
+ client.Inventory.Refresh();
+
+ //
+ // Block until we have the items
+ //
+ while ( client.Inventory.SerializedItems == null )
+ {
+ client.Update();
+ }
+
+ Assert.IsNotNull( client.Inventory.SerializedItems );
+ Assert.IsTrue( client.Inventory.SerializedItems.Length > 4 );
+
+ using ( var server = new Facepunch.Steamworks.Server( 252490, 0, 30002, true, "VersionString" ) )
+ {
+ server.LogOnAnonymous();
+ Assert.IsTrue( server.Valid );
+
+ var result = server.Inventory.Deserialize( client.Inventory.SerializedItems );
+
+ Assert.IsTrue( result.Block() );
+ Assert.IsNotNull( result.Items );
+
+ foreach ( var item in result.Items )
+ {
+ Console.WriteLine( "Item: {0} ({1})", item.Id, item.DefinitionId );
+ Console.WriteLine( "Item: {0} ({1})", item.Id, item.DefinitionId );
+ }
+ }
+ }
+ }
+
+ }
+}
diff --git a/Facepunch.Steamworks/Client.cs b/Facepunch.Steamworks/Client.cs
index 0b60b3e..8c41e3e 100644
--- a/Facepunch.Steamworks/Client.cs
+++ b/Facepunch.Steamworks/Client.cs
@@ -9,8 +9,8 @@ namespace Facepunch.Steamworks
{
internal class Internal : IDisposable
{
- private uint _hpipe;
- private uint _huser;
+ private int _hpipe;
+ private int _huser;
internal Valve.Steamworks.ISteamClient client;
internal Valve.Steamworks.ISteamUser user;
@@ -25,7 +25,18 @@ namespace Facepunch.Steamworks
internal bool Init()
{
- client = Valve.Steamworks.SteamAPI.SteamClient();
+ _huser = Valve.Interop.NativeEntrypoints.Extended.SteamAPI_GetHSteamUser();
+ _hpipe = Valve.Interop.NativeEntrypoints.Extended.SteamAPI_GetHSteamPipe();
+ if ( _hpipe == 0 )
+ throw new System.Exception( "Couldn't get Steam Pipe" );
+
+ var clientPtr = Valve.Interop.NativeEntrypoints.Extended.SteamInternal_CreateInterface( "SteamClient017" );
+ if ( clientPtr == IntPtr.Zero )
+ {
+ throw new System.Exception( "Steam Client: Couldn't load SteamClient017" );
+ }
+
+ client = new Valve.Steamworks.CSteamClient( clientPtr );
if ( client.GetIntPtr() == IntPtr.Zero )
{
@@ -33,13 +44,12 @@ namespace Facepunch.Steamworks
return false;
}
- _hpipe = client.CreateSteamPipe();
- _huser = client.ConnectToGlobalUser( _hpipe );
-
friends = client.GetISteamFriends( _huser, _hpipe, "SteamFriends015" );
+ if ( friends.GetIntPtr() == IntPtr.Zero ) throw new System.Exception( "Couldn't load SteamFriends015" );
+
user = client.GetISteamUser( _huser, _hpipe, "SteamUser019" );
servers = client.GetISteamMatchmakingServers( _huser, _hpipe, "SteamMatchMakingServers002" );
- inventory = client.GetISteamInventory( _huser, _hpipe, "STEAMINVENTORY_INTERFACE_V001" );
+ inventory = client.GetISteamInventory( _huser, _hpipe, "STEAMINVENTORY_INTERFACE_V001" );
networking = client.GetISteamNetworking( _huser, _hpipe, "SteamNetworking005" );
apps = client.GetISteamApps( _huser, _hpipe, "STEAMAPPS_INTERFACE_VERSION008" );
userstats = client.GetISteamUserStats( _huser, _hpipe, "STEAMUSERSTATS_INTERFACE_VERSION011" );
@@ -54,10 +64,10 @@ namespace Facepunch.Steamworks
{
if ( _hpipe > 0 && client != null )
{
- if ( _huser > 0 )
- client.ReleaseUser( _hpipe, _huser );
+ // if ( _huser > 0 )
+ // client.ReleaseUser( _hpipe, _huser );
- client.BReleaseSteamPipe( _hpipe );
+ // client.BReleaseSteamPipe( _hpipe );
_huser = 0;
_hpipe = 0;
@@ -68,6 +78,8 @@ namespace Facepunch.Steamworks
client.BShutdownIfAllPipesClosed();
client = null;
}
+
+ Valve.Interop.NativeEntrypoints.Extended.SteamAPI_Shutdown();
}
}
@@ -106,7 +118,7 @@ namespace Facepunch.Steamworks
public Client( uint appId )
{
- Valve.Steamworks.SteamAPI.Init( appId );
+ Valve.Steamworks.SteamAPIInterop.SteamAPI_Init();
native = new Internal();
diff --git a/Facepunch.Steamworks/Client/Inventory.Definition.cs b/Facepunch.Steamworks/Client/Inventory.Definition.cs
new file mode 100644
index 0000000..41dc20e
--- /dev/null
+++ b/Facepunch.Steamworks/Client/Inventory.Definition.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Facepunch.Steamworks
+{
+ public partial class Inventory
+ {
+ ///
+ /// An item definition. This describes an item in your Steam inventory, but is
+ /// not unique to that item. For example, this might be a tshirt, but you might be able to own
+ /// multiple tshirts.
+ ///
+ public class Definition
+ {
+ internal Valve.Steamworks.ISteamInventory inventory;
+
+ public int Id;
+ public string Name;
+ public string Description;
+
+ public DateTime Created;
+ public DateTime Modified;
+
+ internal Definition( int id )
+ {
+ Id = id;
+ }
+
+ public T GetProperty( string name )
+ {
+ string val = string.Empty;
+
+ if ( !inventory.GetItemDefinitionProperty( Id, name, out val ) )
+ return default( T );
+
+ try
+ {
+ return (T)Convert.ChangeType( val, typeof( T ) );
+ }
+ catch ( System.Exception )
+ {
+ return default( T );
+ }
+ }
+
+ internal void SetupCommonProperties()
+ {
+ Name = GetProperty( "name" );
+ Description = GetProperty( "description" );
+ Created = GetProperty( "timestamp" );
+ Modified = GetProperty( "modified" );
+ }
+
+ ///
+ /// Trigger an item drop. Call this when it's a good time to award
+ /// an item drop to a player. This won't automatically result in giving
+ /// an item to a player. Just call it every minute or so, or on launch.
+ /// ItemDefinition is usually a generator
+ ///
+ public void TriggerItemDrop()
+ {
+ int result = 0;
+ inventory.TriggerItemDrop( ref result, Id );
+ inventory.DestroyResult( result );
+ }
+ }
+ }
+}
diff --git a/Facepunch.Steamworks/Client/Inventory.Item.cs b/Facepunch.Steamworks/Client/Inventory.Item.cs
new file mode 100644
index 0000000..b43a6a6
--- /dev/null
+++ b/Facepunch.Steamworks/Client/Inventory.Item.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Facepunch.Steamworks
+{
+ public partial class Inventory
+ {
+ ///
+ /// An item in your inventory.
+ ///
+ public class Item
+ {
+ public ulong Id;
+ public int Quantity;
+
+ public int DefinitionId;
+
+ ///
+ /// Careful, this might not be available. Especially on a game server.
+ ///
+ public Definition Definition;
+
+ public bool TradeLocked;
+ }
+ }
+}
diff --git a/Facepunch.Steamworks/Client/Inventory.Result.cs b/Facepunch.Steamworks/Client/Inventory.Result.cs
new file mode 100644
index 0000000..e010ea0
--- /dev/null
+++ b/Facepunch.Steamworks/Client/Inventory.Result.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Facepunch.Steamworks
+{
+ public partial class Inventory
+ {
+ public class Result : IDisposable
+ {
+ internal Inventory inventory;
+
+ public int Handle { get; private set; }
+ public Item[] Items { get; internal set; }
+
+ public bool IsPending
+ {
+ get
+ {
+ if ( Items != null ) return false;
+ if ( Handle == -1 ) return false;
+ if ( inventory.inventory.GetResultStatus( Handle ) == 22 ) return true;
+
+ Fill();
+ return false;
+ }
+ }
+
+ internal bool IsSuccess
+ {
+ get
+ {
+ if ( Items != null ) return true;
+ if ( Handle == -1 ) return false;
+ return inventory.inventory.GetResultStatus( Handle ) == 1;
+ }
+ }
+
+ internal Result( Inventory inventory, int Handle )
+ {
+ this.Handle = Handle;
+ this.inventory = inventory;
+ }
+
+ public bool Block( float maxWait = 5.0f )
+ {
+ while ( IsPending )
+ {
+ System.Threading.Thread.Sleep( 5 );
+ }
+
+ return IsSuccess;
+ }
+
+ internal void Fill()
+ {
+ if ( Items != null ) return;
+
+ Valve.Steamworks.SteamItemDetails_t[] steamItems = null;
+ inventory.inventory.GetResultItems( Handle, out steamItems );
+
+ if ( steamItems == null )
+ {
+ throw new System.Exception( "steamItems was null" );
+ }
+
+ Items = steamItems.Select( x =>
+ {
+ return new Inventory.Item()
+ {
+ Quantity = x.m_unQuantity,
+ Id = x.m_itemId,
+ DefinitionId = x.m_iDefinition,
+ TradeLocked = ( (int)x.m_unFlags & (int)Valve.Steamworks.ESteamItemFlags.k_ESteamItemNoTrade ) != 0,
+ Definition = inventory.FindDefinition( x.m_iDefinition )
+ };
+ } ).ToArray();
+ }
+
+ internal byte[] Serialize()
+ {
+ uint size = 0;
+ inventory.inventory.SerializeResult( Handle, IntPtr.Zero, out size );
+
+ IntPtr ptr = Marshal.AllocHGlobal((int) size);
+
+ if ( !inventory.inventory.SerializeResult( Handle, ptr, out size ) )
+ return null;
+
+ var data = new byte[size];
+
+ Marshal.Copy( ptr, data, 0, (int)size );
+ Marshal.FreeHGlobal( ptr );
+
+ return data;
+ }
+
+ public void Dispose()
+ {
+ inventory.inventory.DestroyResult( Handle );
+ Handle = -1;
+ }
+ }
+
+ }
+}
diff --git a/Facepunch.Steamworks/Client/Inventory.cs b/Facepunch.Steamworks/Client/Inventory.cs
index 60563cb..d52197e 100644
--- a/Facepunch.Steamworks/Client/Inventory.cs
+++ b/Facepunch.Steamworks/Client/Inventory.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.InteropServices;
using System.Text;
namespace Facepunch.Steamworks
@@ -14,129 +15,21 @@ namespace Facepunch.Steamworks
get
{
if ( _inv == null )
- _inv = new Inventory( this );
+ _inv = new Inventory( native.inventory, false );
return _inv;
}
}
}
- public class Inventory
+ public partial class Inventory
{
///
- /// Called when the items are first retrieved, and when they change
+ /// Called when the local client's items are first retrieved, and when they change.
+ /// Obviously not called on the server.
///
public Action OnUpdate;
- internal Client client;
- private int updateRequest = -1;
-
- internal Inventory( Client c )
- {
- client = c;
-
- LoadItemDefinitions();
- }
-
- ///
- /// Call this at least every two minutes, every frame doesn't hurt.
- /// You should call it when you consider it active play time.
- /// IE - your player is alive, and playing.
- /// Don't stress on it too much tho cuz it's super hijackable anyway.
- ///
- public void PlaytimeHeartbeat()
- {
- client.native.inventory.SendItemDropHeartbeat();
- }
-
- ///
- /// Call this to retrieve the items.
- /// Note that if this has already been called it won't
- /// trigger a call to OnUpdate unless the items have changed
- ///
- public void Refresh()
- {
- // Pending
- if ( updateRequest != -1 )
- return;
-
- if ( !client.native.inventory.GetAllItems( ref updateRequest ) )
- {
- Console.WriteLine( "GetAllItems failed!?" );
- }
- }
-
- public Definition CreateDefinition( int id )
- {
- return new Definition( id )
- {
- client = client
- };
- }
-
- internal void LoadItemDefinitions()
- {
- //
- // Make sure item definitions are loaded, because we're going to be using them.
- //
- client.native.inventory.LoadItemDefinitions();
-
- int[] ids;
- if ( !client.native.inventory.GetItemDefinitionIDs( out ids ) )
- return;
-
- Definitions = ids.Select( x =>
- {
- var d = CreateDefinition( x );
- d.SetupCommonProperties();
- return d;
-
- } ).ToArray();
- }
-
- internal T DefinitionProperty( int i, string name )
- {
- string val = string.Empty;
- client.native.inventory.GetItemDefinitionProperty( i, name, out val );
- return (T) Convert.ChangeType( val, typeof( T) );
- }
-
- internal void DestroyResult()
- {
- if ( updateRequest == -1 ) return;
-
- client.native.inventory.DestroyResult( updateRequest );
- updateRequest = -1;
- }
-
-
- internal void Update()
- {
- UpdateRequest();
- }
-
- private void UpdateRequest()
- {
- if ( updateRequest == -1 )
- return;
-
- var status = (Valve.Steamworks.EResult) client.native.inventory.GetResultStatus( updateRequest );
-
- if ( status == Valve.Steamworks.EResult.k_EResultPending )
- return;
-
- if ( status == Valve.Steamworks.EResult.k_EResultOK )
- {
- RetrieveInventory();
- return;
- }
-
- // Some other error
- // Lets just retry.
- DestroyResult();
- Refresh();
- }
-
///
/// A list of items owned by this user. You should call Refresh() before trying to access this,
/// and then wait until it's non null or listen to OnUpdate to find out immediately when it's populated.
@@ -154,42 +47,131 @@ namespace Facepunch.Steamworks
///
public DateTime SerializedExpireTime;
- private unsafe void RetrieveInventory()
+ internal Valve.Steamworks.ISteamInventory inventory;
+ private Result LocalPlayerRequest;
+ private bool IsServer { get; set; }
+
+ internal Inventory( Valve.Steamworks.ISteamInventory c, bool server )
{
- Valve.Steamworks.SteamItemDetails_t[] items = null;
- client.native.inventory.GetResultItems( updateRequest, out items );
+ IsServer = server;
+ inventory = c;
- Items = items.Select( x =>
+ inventory.LoadItemDefinitions();
+ FetchItemDefinitions();
+ }
+
+ ///
+ /// Call this at least every two minutes, every frame doesn't hurt.
+ /// You should call it when you consider it active play time.
+ /// IE - your player is alive, and playing.
+ /// Don't stress on it too much tho cuz it's super hijackable anyway.
+ ///
+ public void PlaytimeHeartbeat()
+ {
+ inventory.SendItemDropHeartbeat();
+ }
+
+ ///
+ /// Call this to retrieve the items.
+ /// Note that if this has already been called it won't
+ /// trigger a call to OnUpdate unless the items have changed
+ ///
+ public void Refresh()
+ {
+ if ( IsServer ) return;
+
+ // Pending
+ if ( LocalPlayerRequest != null )
+ return;
+
+ int request = 0;
+ if ( !inventory.GetAllItems( ref request ) || request == -1 )
{
- return new Item()
- {
- client = client,
- Quantity = x.m_unQuantity,
- Id = x.m_itemId,
- DefinitionId = x.m_iDefinition,
- TradeLocked = ( (int)x.m_unFlags & (int)Valve.Steamworks.ESteamItemFlags.k_ESteamItemNoTrade ) != 0,
- Definition = Definitions.FirstOrDefault( y => y.Id == x.m_iDefinition )
- };
- } ).ToArray();
-
- //
- // Get a serialized version
- //
- uint size = 0;
- client.native.inventory.SerializeResult( updateRequest, IntPtr.Zero, ref size );
- SerializedItems = new byte[size];
-
- fixed( byte* b = SerializedItems )
- {
- client.native.inventory.SerializeResult( updateRequest, (IntPtr) b, ref size );
+ Console.WriteLine( "GetAllItems failed!?" );
+ return;
}
+ LocalPlayerRequest = new Result( this, request );
+ }
+
+ ///
+ /// Some definitions aren't sent to the client, and all aren't available on the server.
+ /// Manually getting a Definition here lets you call functions on those definitions.
+ ///
+ public Definition CreateDefinition( int id )
+ {
+ return new Definition( id )
+ {
+ inventory = inventory
+ };
+ }
+
+ internal void FetchItemDefinitions()
+ {
+ //
+ // Make sure item definitions are loaded, because we're going to be using them.
+ //
+
+ int[] ids;
+ if ( !inventory.GetItemDefinitionIDs( out ids ) )
+ {
+ Console.WriteLine( "Couldn't load definitions" );
+ return;
+ }
+
+ Definitions = ids.Select( x =>
+ {
+ var d = CreateDefinition( x );
+ d.SetupCommonProperties();
+ return d;
+
+ } ).ToArray();
+ }
+
+ ///
+ /// Called every frame
+ ///
+ internal void Update()
+ {
+ if ( Definitions == null )
+ FetchItemDefinitions();
+
+ UpdateLocalRequest();
+ }
+
+ ///
+ /// If we have a local player request process it.
+ ///
+ private void UpdateLocalRequest()
+ {
+ if ( LocalPlayerRequest == null )
+ return;
+
+ if ( LocalPlayerRequest.IsPending )
+ return;
+
+ if ( LocalPlayerRequest.IsSuccess )
+ {
+ RetrieveInventory();
+ return;
+ }
+
+ // Some other error
+ // Lets just retry.
+ LocalPlayerRequest.Dispose();
+ LocalPlayerRequest = null;
+ Refresh();
+ }
+
+ private unsafe void RetrieveInventory()
+ {
+ SerializedItems = LocalPlayerRequest.Serialize();
SerializedExpireTime = DateTime.Now.Add( TimeSpan.FromMinutes( 60 ) );
- //
- // Finished with this result, don't call it again
- //
- DestroyResult();
+ Items = LocalPlayerRequest.Items;
+
+ LocalPlayerRequest.Dispose();
+ LocalPlayerRequest = null;
//
// Tell everyone we've got new items!
@@ -197,90 +179,12 @@ namespace Facepunch.Steamworks
OnUpdate?.Invoke();
}
- ///
- /// An item in your inventory.
- ///
- public class Item
- {
- internal Client client;
-
- public ulong Id;
- public int Quantity;
-
- public int DefinitionId;
- public Definition Definition;
-
- public bool TradeLocked;
- }
-
///
/// A list of items defined for this app.
/// This should be immediately populated and available.
///
public Definition[] Definitions;
-
- ///
- /// An item definition. This describes an item in your Steam inventory, but is
- /// not unique to that item. For example, this might be a tshirt, but you might be able to own
- /// multiple tshirts.
- ///
- public class Definition
- {
- internal Client client;
-
- public int Id;
- public string Name;
- public string Description;
-
- public DateTime Created;
- public DateTime Modified;
-
- internal Definition( int id )
- {
- Id = id;
- }
-
- public T GetProperty( string name )
- {
- string val = string.Empty;
-
- if ( !client.native.inventory.GetItemDefinitionProperty( Id, name, out val ) )
- return default( T );
-
- try
- {
- return (T)Convert.ChangeType( val, typeof( T ) );
- }
- catch( System.Exception )
- {
- return default( T );
- }
- }
-
- internal void SetupCommonProperties()
- {
- Name = GetProperty( "name" );
- Description = GetProperty( "description" );
- Created = GetProperty( "timestamp" );
- Modified = GetProperty( "modified" );
- }
-
- ///
- /// Trigger an item drop. Call this when it's a good time to award
- /// an item drop to a player. This won't automatically result in giving
- /// an item to a player. Just call it every minute or so, or on launch.
- /// ItemDefinition is usually a generator
- ///
- public void TriggerItemDrop()
- {
- int result = 0;
- client.native.inventory.TriggerItemDrop( ref result, Id );
- client.native.inventory.DestroyResult( result );
- }
- }
-
-
///
/// Utility, given a "1;VLV250" string, convert it to a 2.5
///
@@ -295,5 +199,30 @@ namespace Facepunch.Steamworks
return int.Parse( price ) / 100.0f;
}
+ private Definition FindDefinition( int def )
+ {
+ if ( Definitions == null ) return null;
+
+ return Definitions.FirstOrDefault( x => x.Id == def );
+ }
+
+ public Result Deserialize( byte[] data, int dataLength = -1 )
+ {
+ if ( dataLength == -1 )
+ dataLength = data.Length;
+
+ int resultHandle = -1;
+
+ IntPtr ptr = Marshal.AllocHGlobal( dataLength);
+ Marshal.Copy( data, 0, ptr, dataLength );
+ var result = inventory.DeserializeResult( out resultHandle, ptr, (uint)dataLength, false );
+ Marshal.FreeHGlobal( ptr );
+
+ if ( !result || resultHandle == -1 )
+ return null;
+
+ return new Result( this, resultHandle );
+ }
+
}
}
diff --git a/Facepunch.Steamworks/Facepunch.Steamworks.csproj b/Facepunch.Steamworks/Facepunch.Steamworks.csproj
index 625c869..c785f0b 100644
--- a/Facepunch.Steamworks/Facepunch.Steamworks.csproj
+++ b/Facepunch.Steamworks/Facepunch.Steamworks.csproj
@@ -114,6 +114,8 @@
+
+
@@ -127,6 +129,7 @@
+
@@ -135,6 +138,7 @@
+
diff --git a/Facepunch.Steamworks/Interop/steam_api_interop.cs b/Facepunch.Steamworks/Interop/steam_api_interop.cs
index bb7a78e..4953430 100644
--- a/Facepunch.Steamworks/Interop/steam_api_interop.cs
+++ b/Facepunch.Steamworks/Interop/steam_api_interop.cs
@@ -15,6 +15,8 @@ namespace Valve.Interop
{
internal class NativeEntrypoints
{
+
+
internal class Extended
{
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
@@ -24,57 +26,65 @@ namespace Valve.Interop
internal static extern IntPtr SteamInternal_CreateInterface( string ver );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
- internal static extern uint SteamGameServer_GetHSteamUser();
+ internal static extern int SteamGameServer_GetHSteamUser();
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
- internal static extern uint SteamGameServer_GetHSteamPipe();
+ internal static extern int SteamGameServer_GetHSteamPipe();
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
internal static extern void SteamGameServer_Shutdown();
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
internal static extern void SteamGameServer_RunCallbacks();
-
+
+ [DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
+ internal static extern int SteamAPI_GetHSteamUser();
+
+ [DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
+ internal static extern int SteamAPI_GetHSteamPipe();
+
+ [DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl )]
+ internal static extern int SteamAPI_Shutdown();
}
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_CreateSteamPipe" )]
internal static extern uint SteamAPI_ISteamClient_CreateSteamPipe( IntPtr instancePtr );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_BReleaseSteamPipe" )]
- internal static extern bool SteamAPI_ISteamClient_BReleaseSteamPipe( IntPtr instancePtr, uint hSteamPipe );
+ internal static extern bool SteamAPI_ISteamClient_BReleaseSteamPipe( IntPtr instancePtr, int hSteamPipe );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_ConnectToGlobalUser" )]
- internal static extern uint SteamAPI_ISteamClient_ConnectToGlobalUser( IntPtr instancePtr, uint hSteamPipe );
+ internal static extern uint SteamAPI_ISteamClient_ConnectToGlobalUser( IntPtr instancePtr, int hSteamPipe );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_CreateLocalUser" )]
- internal static extern uint SteamAPI_ISteamClient_CreateLocalUser( IntPtr instancePtr, ref uint phSteamPipe, uint eAccountType );
+ internal static extern uint SteamAPI_ISteamClient_CreateLocalUser( IntPtr instancePtr, ref int phSteamPipe, uint eAccountType );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_ReleaseUser" )]
- internal static extern void SteamAPI_ISteamClient_ReleaseUser( IntPtr instancePtr, uint hSteamPipe, uint hUser );
+ internal static extern void SteamAPI_ISteamClient_ReleaseUser( IntPtr instancePtr, int hSteamPipe, int hUser );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamUser" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUser( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUser( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamGameServer" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServer( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServer( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_SetLocalIPBinding" )]
internal static extern void SteamAPI_ISteamClient_SetLocalIPBinding( IntPtr instancePtr, uint unIP, char usPort );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamFriends" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamFriends( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamFriends( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamUtils" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUtils( IntPtr instancePtr, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUtils( IntPtr instancePtr, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamMatchmaking" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmaking( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmaking( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamMatchmakingServers" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmakingServers( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMatchmakingServers( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamGenericInterface" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGenericInterface( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGenericInterface( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamUserStats" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUserStats( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUserStats( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamGameServerStats" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServerStats( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamGameServerStats( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamApps" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamApps( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamApps( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamNetworking" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamNetworking( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamNetworking( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamRemoteStorage" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamRemoteStorage( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamRemoteStorage( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamScreenshots" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamScreenshots( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamScreenshots( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetIPCCallCount" )]
internal static extern uint SteamAPI_ISteamClient_GetIPCCallCount( IntPtr instancePtr );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_SetWarningMessageHook" )]
@@ -82,25 +92,25 @@ namespace Valve.Interop
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_BShutdownIfAllPipesClosed" )]
internal static extern bool SteamAPI_ISteamClient_BShutdownIfAllPipesClosed( IntPtr instancePtr );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamHTTP" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTTP( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTTP( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamUnifiedMessages" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUnifiedMessages( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUnifiedMessages( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamController" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamController( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamController( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamUGC" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUGC( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamUGC( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamAppList" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamAppList( IntPtr instancePtr, uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamAppList( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamMusic" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusic( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusic( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamMusicRemote" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusicRemote( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamMusicRemote( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamHTMLSurface" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTMLSurface( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamHTMLSurface( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamInventory" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamInventory( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamInventory( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamClient_GetISteamVideo" )]
- internal static extern IntPtr SteamAPI_ISteamClient_GetISteamVideo( IntPtr instancePtr, uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal static extern IntPtr SteamAPI_ISteamClient_GetISteamVideo( IntPtr instancePtr, int hSteamUser, int hSteamPipe, string pchVersion );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamUser_GetHSteamUser" )]
internal static extern uint SteamAPI_ISteamUser_GetHSteamUser( IntPtr instancePtr );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamUser_BLoggedOn" )]
@@ -1168,7 +1178,7 @@ namespace Valve.Interop
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamHTMLSurface_JSDialogResponse" )]
internal static extern void SteamAPI_ISteamHTMLSurface_JSDialogResponse( IntPtr instancePtr, uint unBrowserHandle, bool bResult );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamInventory_GetResultStatus" )]
- internal static extern uint SteamAPI_ISteamInventory_GetResultStatus( IntPtr instancePtr, int resultHandle );
+ internal static extern int SteamAPI_ISteamInventory_GetResultStatus( IntPtr instancePtr, int resultHandle );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamInventory_GetResultItems" )]
internal static extern bool SteamAPI_ISteamInventory_GetResultItems( IntPtr instancePtr, int resultHandle, [In, Out] SteamItemDetails_t[] pOutItemsArray, ref uint punOutItemsArraySize );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamInventory_GetResultTimestamp" )]
@@ -1182,9 +1192,9 @@ namespace Valve.Interop
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamInventory_GetItemsByID" )]
internal static extern bool SteamAPI_ISteamInventory_GetItemsByID( IntPtr instancePtr, ref int pResultHandle, [In, Out] ulong[] pInstanceIDs, uint unCountInstanceIDs );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamInventory_SerializeResult" )]
- internal static extern bool SteamAPI_ISteamInventory_SerializeResult( IntPtr instancePtr, int resultHandle, IntPtr pOutBuffer, ref uint punOutBufferSize );
+ internal static extern bool SteamAPI_ISteamInventory_SerializeResult( IntPtr instancePtr, int resultHandle, IntPtr pOutBuffer, out uint punOutBufferSize );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, 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 );
+ internal static unsafe extern bool SteamAPI_ISteamInventory_DeserializeResult( IntPtr instancePtr, out int pOutResultHandle, IntPtr pBuffer, uint unBufferSize, bool bRESERVED_MUST_BE_FALSE );
[DllImportAttribute( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, 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( Config.LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "SteamAPI_ISteamInventory_GrantPromoItems" )]
@@ -1580,37 +1590,37 @@ namespace Valve.Steamworks
{
internal abstract IntPtr GetIntPtr();
internal abstract uint CreateSteamPipe();
- internal abstract bool BReleaseSteamPipe( uint hSteamPipe );
- internal abstract uint ConnectToGlobalUser( uint hSteamPipe );
- internal abstract uint CreateLocalUser( ref uint phSteamPipe, uint eAccountType );
- internal abstract void ReleaseUser( uint hSteamPipe, uint hUser );
- internal abstract ISteamUser GetISteamUser( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamGameServer GetISteamGameServer( uint hSteamUser, uint hSteamPipe, string pchVersion );
+ internal abstract bool BReleaseSteamPipe( int hSteamPipe );
+ internal abstract uint ConnectToGlobalUser( int hSteamPipe );
+ internal abstract uint CreateLocalUser( ref int phSteamPipe, uint eAccountType );
+ internal abstract void ReleaseUser( int hSteamPipe, int hUser );
+ internal abstract ISteamUser GetISteamUser( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamGameServer GetISteamGameServer( int hSteamUser, int hSteamPipe, string pchVersion );
internal abstract void SetLocalIPBinding( uint unIP, char usPort );
- internal abstract ISteamFriends GetISteamFriends( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamUtils GetISteamUtils( uint hSteamPipe, string pchVersion );
- internal abstract ISteamMatchmaking GetISteamMatchmaking( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamMatchmakingServers GetISteamMatchmakingServers( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract IntPtr GetISteamGenericInterface( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamUserStats GetISteamUserStats( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamGameServerStats GetISteamGameServerStats( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamApps GetISteamApps( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamNetworking GetISteamNetworking( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamRemoteStorage GetISteamRemoteStorage( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamScreenshots GetISteamScreenshots( uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal abstract ISteamFriends GetISteamFriends( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamUtils GetISteamUtils( int hSteamPipe, string pchVersion );
+ internal abstract ISteamMatchmaking GetISteamMatchmaking( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamMatchmakingServers GetISteamMatchmakingServers( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract IntPtr GetISteamGenericInterface( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamUserStats GetISteamUserStats( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamGameServerStats GetISteamGameServerStats( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamApps GetISteamApps( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamNetworking GetISteamNetworking( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamRemoteStorage GetISteamRemoteStorage( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamScreenshots GetISteamScreenshots( int hSteamUser, int hSteamPipe, string pchVersion );
internal abstract uint GetIPCCallCount();
internal abstract void SetWarningMessageHook( IntPtr pFunction );
internal abstract bool BShutdownIfAllPipesClosed();
- internal abstract ISteamHTTP GetISteamHTTP( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamUnifiedMessages GetISteamUnifiedMessages( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamController GetISteamController( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamUGC GetISteamUGC( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamAppList GetISteamAppList( uint hSteamUser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamMusic GetISteamMusic( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamMusicRemote GetISteamMusicRemote( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamHTMLSurface GetISteamHTMLSurface( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamInventory GetISteamInventory( uint hSteamuser, uint hSteamPipe, string pchVersion );
- internal abstract ISteamVideo GetISteamVideo( uint hSteamuser, uint hSteamPipe, string pchVersion );
+ internal abstract ISteamHTTP GetISteamHTTP( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamUnifiedMessages GetISteamUnifiedMessages( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamController GetISteamController( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamUGC GetISteamUGC( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamAppList GetISteamAppList( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamMusic GetISteamMusic( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamMusicRemote GetISteamMusicRemote( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamHTMLSurface GetISteamHTMLSurface( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamInventory GetISteamInventory( int hSteamUser, int hSteamPipe, string pchVersion );
+ internal abstract ISteamVideo GetISteamVideo( int hSteamUser, int hSteamPipe, string pchVersion );
}
@@ -2282,15 +2292,15 @@ namespace Valve.Steamworks
internal abstract class ISteamInventory
{
internal abstract IntPtr GetIntPtr();
- internal abstract uint GetResultStatus( int resultHandle );
+ internal abstract int GetResultStatus( int resultHandle );
internal abstract bool GetResultItems( int resultHandle, out SteamItemDetails_t[] pOutItemsArray );
internal abstract uint GetResultTimestamp( int resultHandle );
internal abstract bool CheckResultSteamID( int resultHandle, ulong steamIDExpected );
internal abstract void DestroyResult( int resultHandle );
internal abstract bool GetAllItems( ref int pResultHandle );
internal abstract bool GetItemsByID( ref int pResultHandle, ulong[] pInstanceIDs );
- internal abstract bool SerializeResult( int resultHandle, IntPtr pOutBuffer, ref uint punOutBufferSize );
- internal abstract bool DeserializeResult( ref int pOutResultHandle, IntPtr pBuffer, uint unBufferSize, bool bRESERVED_MUST_BE_FALSE );
+ internal abstract bool SerializeResult( int resultHandle, IntPtr pOutBuffer, out uint punOutBufferSize );
+ internal abstract bool DeserializeResult( out int pOutResultHandle, IntPtr pBuffer, uint unBufferSize, bool bRESERVED_MUST_BE_FALSE );
internal abstract bool GenerateItems( ref int pResultHandle, int[] pArrayItemDefs, uint[] punArrayQuantity );
internal abstract bool GrantPromoItems( ref int pResultHandle );
internal abstract bool AddPromoItem( ref int pResultHandle, int itemDef );
@@ -2404,37 +2414,37 @@ namespace Valve.Steamworks
uint result = NativeEntrypoints.SteamAPI_ISteamClient_CreateSteamPipe(m_pSteamClient);
return result;
}
- internal override bool BReleaseSteamPipe( uint hSteamPipe )
+ internal override bool BReleaseSteamPipe( int hSteamPipe )
{
CheckIfUsable();
bool result = NativeEntrypoints.SteamAPI_ISteamClient_BReleaseSteamPipe(m_pSteamClient,hSteamPipe);
return result;
}
- internal override uint ConnectToGlobalUser( uint hSteamPipe )
+ internal override uint ConnectToGlobalUser( int hSteamPipe )
{
CheckIfUsable();
uint result = NativeEntrypoints.SteamAPI_ISteamClient_ConnectToGlobalUser(m_pSteamClient,hSteamPipe);
return result;
}
- internal override uint CreateLocalUser( ref uint phSteamPipe, uint eAccountType )
+ internal override uint CreateLocalUser( ref int phSteamPipe, uint eAccountType )
{
CheckIfUsable();
phSteamPipe = 0;
uint result = NativeEntrypoints.SteamAPI_ISteamClient_CreateLocalUser(m_pSteamClient,ref phSteamPipe,eAccountType);
return result;
}
- internal override void ReleaseUser( uint hSteamPipe, uint hUser )
+ internal override void ReleaseUser( int hSteamPipe, int hUser )
{
CheckIfUsable();
NativeEntrypoints.SteamAPI_ISteamClient_ReleaseUser( m_pSteamClient, hSteamPipe, hUser );
}
- internal override ISteamUser GetISteamUser( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamUser GetISteamUser( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUser(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamUser( result );
}
- internal override ISteamGameServer GetISteamGameServer( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamGameServer GetISteamGameServer( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGameServer(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
@@ -2445,70 +2455,70 @@ namespace Valve.Steamworks
CheckIfUsable();
NativeEntrypoints.SteamAPI_ISteamClient_SetLocalIPBinding( m_pSteamClient, unIP, usPort );
}
- internal override ISteamFriends GetISteamFriends( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamFriends GetISteamFriends( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamFriends(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamFriends( result );
}
- internal override ISteamUtils GetISteamUtils( uint hSteamPipe, string pchVersion )
+ internal override ISteamUtils GetISteamUtils( int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUtils(m_pSteamClient,hSteamPipe,pchVersion);
return new CSteamUtils( result );
}
- internal override ISteamMatchmaking GetISteamMatchmaking( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamMatchmaking GetISteamMatchmaking( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMatchmaking(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamMatchmaking)Marshal.PtrToStructure( result, typeof( ISteamMatchmaking ) );
}
- internal override ISteamMatchmakingServers GetISteamMatchmakingServers( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamMatchmakingServers GetISteamMatchmakingServers( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMatchmakingServers(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamMatchmakingServers( result );
}
- internal override IntPtr GetISteamGenericInterface( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override IntPtr GetISteamGenericInterface( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGenericInterface(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (IntPtr)Marshal.PtrToStructure( result, typeof( IntPtr ) );
}
- internal override ISteamUserStats GetISteamUserStats( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamUserStats GetISteamUserStats( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUserStats(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamUserStats( result );
}
- internal override ISteamGameServerStats GetISteamGameServerStats( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamGameServerStats GetISteamGameServerStats( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGameServerStats(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamGameServerStats(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamGameServerStats( result );
}
- internal override ISteamApps GetISteamApps( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamApps GetISteamApps( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamApps(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamApps( result );
}
- internal override ISteamNetworking GetISteamNetworking( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamNetworking GetISteamNetworking( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamNetworking(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamNetworking( result );
}
- internal override ISteamRemoteStorage GetISteamRemoteStorage( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamRemoteStorage GetISteamRemoteStorage( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamRemoteStorage(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamRemoteStorage(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamRemoteStorage)Marshal.PtrToStructure( result, typeof( ISteamRemoteStorage ) );
}
- internal override ISteamScreenshots GetISteamScreenshots( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamScreenshots GetISteamScreenshots( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamScreenshots(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamScreenshots(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamScreenshots( result );
}
internal override uint GetIPCCallCount()
@@ -2528,64 +2538,64 @@ namespace Valve.Steamworks
bool result = NativeEntrypoints.SteamAPI_ISteamClient_BShutdownIfAllPipesClosed(m_pSteamClient);
return result;
}
- internal override ISteamHTTP GetISteamHTTP( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamHTTP GetISteamHTTP( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTTP(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTTP(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamHTTP( result );
}
- internal override ISteamUnifiedMessages GetISteamUnifiedMessages( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamUnifiedMessages GetISteamUnifiedMessages( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUnifiedMessages(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUnifiedMessages(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamUnifiedMessages)Marshal.PtrToStructure( result, typeof( ISteamUnifiedMessages ) );
}
- internal override ISteamController GetISteamController( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamController GetISteamController( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamController(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamController)Marshal.PtrToStructure( result, typeof( ISteamController ) );
}
- internal override ISteamUGC GetISteamUGC( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamUGC GetISteamUGC( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamUGC(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamUGC( result );
}
- internal override ISteamAppList GetISteamAppList( uint hSteamUser, uint hSteamPipe, string pchVersion )
+ internal override ISteamAppList GetISteamAppList( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamAppList(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamAppList)Marshal.PtrToStructure( result, typeof( ISteamAppList ) );
}
- internal override ISteamMusic GetISteamMusic( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamMusic GetISteamMusic( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusic(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusic(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamMusic)Marshal.PtrToStructure( result, typeof( ISteamMusic ) );
}
- internal override ISteamMusicRemote GetISteamMusicRemote( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamMusicRemote GetISteamMusicRemote( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusicRemote(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamMusicRemote(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamMusicRemote)Marshal.PtrToStructure( result, typeof( ISteamMusicRemote ) );
}
- internal override ISteamHTMLSurface GetISteamHTMLSurface( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamHTMLSurface GetISteamHTMLSurface( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTMLSurface(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamHTMLSurface(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamHTMLSurface)Marshal.PtrToStructure( result, typeof( ISteamHTMLSurface ) );
}
- internal override ISteamInventory GetISteamInventory( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamInventory GetISteamInventory( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamInventory(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamInventory(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return new CSteamInventory( result );
}
- internal override ISteamVideo GetISteamVideo( uint hSteamuser, uint hSteamPipe, string pchVersion )
+ internal override ISteamVideo GetISteamVideo( int hSteamUser, int hSteamPipe, string pchVersion )
{
CheckIfUsable();
- IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamVideo(m_pSteamClient,hSteamuser,hSteamPipe,pchVersion);
+ IntPtr result = NativeEntrypoints.SteamAPI_ISteamClient_GetISteamVideo(m_pSteamClient,hSteamUser,hSteamPipe,pchVersion);
return (ISteamVideo)Marshal.PtrToStructure( result, typeof( ISteamVideo ) );
}
}
@@ -6280,17 +6290,24 @@ namespace Valve.Steamworks
throw new Exception( "Steam Pointer not configured" );
}
}
- internal override uint GetResultStatus( int resultHandle )
+ internal override int GetResultStatus( int resultHandle )
{
CheckIfUsable();
- uint result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultStatus(m_pSteamInventory,resultHandle);
+ int result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultStatus(m_pSteamInventory,resultHandle);
return result;
}
internal override bool GetResultItems( int resultHandle, out SteamItemDetails_t[] pOutItemsArray )
{
CheckIfUsable();
+ pOutItemsArray = null;
uint punOutItemsArraySize = 0;
+
bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItems(m_pSteamInventory,resultHandle,null,ref punOutItemsArraySize);
+ if ( result == false )
+ return false;
+
+ Console.WriteLine( "punOutItemsArraySize: " + punOutItemsArraySize );
+
pOutItemsArray = new SteamItemDetails_t[punOutItemsArraySize];
result = NativeEntrypoints.SteamAPI_ISteamInventory_GetResultItems( m_pSteamInventory, resultHandle, pOutItemsArray, ref punOutItemsArraySize );
return result;
@@ -6326,18 +6343,18 @@ namespace Valve.Steamworks
bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemsByID(m_pSteamInventory,ref pResultHandle,pInstanceIDs,(uint) pInstanceIDs.Length);
return result;
}
- internal override bool SerializeResult( int resultHandle, IntPtr pOutBuffer, ref uint punOutBufferSize )
+ internal override bool SerializeResult( int resultHandle, IntPtr pOutBuffer, out uint punOutBufferSize )
{
CheckIfUsable();
- punOutBufferSize = 0;
- bool result = NativeEntrypoints.SteamAPI_ISteamInventory_SerializeResult(m_pSteamInventory,resultHandle,pOutBuffer,ref punOutBufferSize);
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_SerializeResult(m_pSteamInventory,resultHandle,pOutBuffer,out punOutBufferSize);
return result;
}
- internal override bool DeserializeResult( ref int pOutResultHandle, IntPtr pBuffer, uint unBufferSize, bool bRESERVED_MUST_BE_FALSE )
+ internal unsafe override bool DeserializeResult( out 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);
+ pOutResultHandle = -1;
+
+ bool result = NativeEntrypoints.SteamAPI_ISteamInventory_DeserializeResult(m_pSteamInventory, out pOutResultHandle, pBuffer,unBufferSize,bRESERVED_MUST_BE_FALSE);
return result;
}
internal override bool GenerateItems( ref int pResultHandle, int[] pArrayItemDefs, uint[] punArrayQuantity )
@@ -6417,8 +6434,10 @@ namespace Valve.Steamworks
internal override bool GetItemDefinitionIDs( out int[] pItemDefIDs )
{
CheckIfUsable();
+ pItemDefIDs = null;
uint punItemDefIDsArraySize = 0;
bool result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionIDs(m_pSteamInventory,null,ref punItemDefIDsArraySize);
+ if ( result == false ) return false;
pItemDefIDs = new int[punItemDefIDsArraySize];
result = NativeEntrypoints.SteamAPI_ISteamInventory_GetItemDefinitionIDs( m_pSteamInventory, pItemDefIDs, ref punItemDefIDsArraySize );
return result;
@@ -7870,7 +7889,7 @@ namespace Valve.Steamworks
k_EUniverseDev = 4,
k_EUniverseMax = 5,
}
- public enum EResult
+ public enum EResult : int
{
k_EResultOK = 1,
k_EResultFail = 2,
diff --git a/Facepunch.Steamworks/Server.cs b/Facepunch.Steamworks/Server.cs
index 751fa51..fa63085 100644
--- a/Facepunch.Steamworks/Server.cs
+++ b/Facepunch.Steamworks/Server.cs
@@ -50,15 +50,17 @@ namespace Facepunch.Steamworks
http = client.GetISteamHTTP( user, pipe, "STEAMHTTP_INTERFACE_VERSION002" );
inventory = client.GetISteamInventory( user, pipe, "STEAMINVENTORY_INTERFACE_V001" );
ugc = client.GetISteamUGC( user, pipe, "STEAMUGC_INTERFACE_VERSION008" );
+ apps = client.GetISteamApps( user, pipe, "STEAMAPPS_INTERFACE_VERSION008" );
if ( ugc.GetIntPtr() == IntPtr.Zero )
throw new System.Exception( "Steam Server: Couldn't load STEAMUGC_INTERFACE_VERSION008" );
- apps = client.GetISteamApps( user, pipe, "STEAMAPPS_INTERFACE_VERSION008" );
-
if ( apps.GetIntPtr() == IntPtr.Zero )
throw new System.Exception( "Steam Server: Couldn't load STEAMAPPS_INTERFACE_VERSION008" );
+ if ( inventory.GetIntPtr() == IntPtr.Zero )
+ throw new System.Exception( "Steam Server: Couldn't load STEAMINVENTORY_INTERFACE_V001" );
+
return true;
}
diff --git a/Facepunch.Steamworks/Server/Inventory.cs b/Facepunch.Steamworks/Server/Inventory.cs
new file mode 100644
index 0000000..cea256b
--- /dev/null
+++ b/Facepunch.Steamworks/Server/Inventory.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Facepunch.Steamworks
+{
+ public partial class Server
+ {
+ Inventory _inv;
+
+ public Inventory Inventory
+ {
+ get
+ {
+ if ( _inv == null )
+ _inv = new Inventory( native.inventory, true );
+
+ return _inv;
+ }
+ }
+ }
+
+}