{"title":"About Facepunch.Steamworks","wikiName":"Facepunch.Steamworks Wiki","wikiIcon":"https://files.facepunch.com/garry/3ae321f6-27a0-469d-b546-170f38e5f9ad.png","wikiUrl":"steamworks","tags":"code","address":"","createdTime":"2020-01-24T11:51:12.8+00:00","updateCount":57,"markup":"\r\n\u003Ctitle\u003EAbout Facepunch.Steamworks\u003C/title\u003E\r\n\u003Ccat\u003Egettingstarted\u003C/cat\u003E\r\n\r\n# What Is Steamworks?\r\n\r\nSteamworks is a set of APIs made available by Valve to allow developers to create integrations with Steam.\r\n\r\nThis ranges from the simple things like getting the local player\u0027s name, to more complicated things like server lists and UGC (Workshop Stuff).\r\n\r\n# What is Facepunch.Steamworks?\r\n\r\nValve\u0027s Steamwork library is written in C\u002B\u002B. Due to the popularity of Unity a lot of game development is now done in C#.\r\n\r\n[Facepunch.Steamworks](https://github.com/Facepunch/Facepunch.Steamworks) is a C# wrapper on top of Valve\u0027s steamwork library.\r\n\r\n# How does it differ from Steamworks.Net?\r\n\r\n[Steamworks.NET](https://steamworks.github.io/) aims to be a faithful wrapper with the C\u002B\u002B version. Facepunch.Steamworks is a re-interpretation of the Api in a C# world. Here\u0027s an example\r\n\r\n\r\n**Getting Friends List on Steamworks.Net**:\r\n\r\n\u0060\u0060\u0060csharp\r\nint friendCount = SteamFriends.GetFriendCount(EFriendFlags.k_EFriendFlagImmediate);\r\n\r\nfor (int i = 0; i \u003C friendCount; \u002B\u002Bi) \r\n{\r\n\tCSteamID friendSteamId = SteamFriends.GetFriendByIndex(i, EFriendFlags.k_EFriendFlagImmediate);\r\n\tstring friendName = SteamFriends.GetFriendPersonaName(friendSteamId);\r\n\tEPersonaState friendState = SteamFriends.GetFriendPersonaState(friendSteamId);\r\n\r\n\tDebug.Log( $\u0022{friendName} is {friendState}\u0022);\r\n}\r\n\u0060\u0060\u0060\r\n\r\n\r\n**Getting Friends List on Facepunch.Steamworks**:\r\n\r\n\u0060\u0060\u0060csharp\r\nforeach ( var friend in SteamFriends.GetFriends() )\r\n{\r\n    Console.WriteLine( $\u0022{friend.Id}: {friend.Name}\u0022 );\r\n    Console.WriteLine( $\u0022{friend.IsOnline} / {friend.SteamLevel}\u0022 );\r\n}\r\n\u0060\u0060\u0060\r\n\r\n\r\n# Where can I get it?\r\n\r\nYou can download a release on the [Github Page](https://github.com/Facepunch/Facepunch.Steamworks).\r\n\r\n# How to build from Master branch\r\n\r\nDownload the latest Steamworks SDK that Facepunch.Steamworks is compatible with. As of right now it is version 150, available for download [here](https://partner.steamgames.com/downloads/steamworks_sdk.zip)\r\n\r\nCopy the following folder and it\u0027s contents into your Unity project: \u0060\\sdk\\redistributable_bin\u0060\r\n\r\nClone the repository locally\r\n\r\nOpen the solution file (Facepunch.Steamworks.sln) in Visual Studio\r\n\r\nIn the toolbar select \u0060build \u003E build solution\u0060\r\n\r\nNavigate to the Face.Steamworks folder and copy the contents of: \u0060\\Facepunch.Steamworks\\bin\\Debug\\net46\u0060 to your Unity project.\r\n\r\nThe last step is to set the \u0060.dll\u0060 files to have the correct settings. Follow these steps in Unity now that you\u0027ve copied the files over:\r\n\r\n- Facepunch.Steamworks.Posix.dll: \r\n\t- Any Platform: Unchecked\r\n\t- Include Platforms: Editor, Standalone\r\n\t- Platform Settings: \r\n\t\t- CPU: Any\r\n\t\t- OS: OSX\r\n\t\t- Switch tabs:\r\n\t\t\t- Windows: all unchecked\r\n\t\t\t- Linux and OSX: all checked\r\n\r\n- Facepunch.Steamworks.Win32.dll: \r\n\t- Any Platform: Checked\r\n\t- Include Platforms: Both Unchecked\r\n\t- Platform Settings: \r\n\t\t- CPU: x86\r\n\t\t- OS: Windows\r\n\t\t- Switch tabs:\r\n\t\t\t- Windows: check x86\r\n\t\t\t- everything else: Unchecked\r\n\r\n- Facepunch.Steamworks.Win64.dll: \r\n\t- Any Platform: Checked\r\n\t- Include Platforms: Both Unchecked\r\n\t- Platform Settings: \r\n\t\t- CPU: x86_64\r\n\t\t- OS: Windows\r\n\t\t- Switch tabs:\r\n\t\t\t- Windows: check x86_64\r\n\t\t\t- Linux and OSX: Unchecked","html":"\u003Ch1\u003EWhat Is Steamworks?\u003Ca class=\u0022anchor\u0022 href=\u0022#whatissteamworks\u0022\u003E\u003Ci class=\u0022mdi mdi-link-variant\u0022\u003E\u003C/i\u003E\u003C/a\u003E\u003Ca name=\u0022whatissteamworks\u0022 class=\u0022anchor_offset\u0022\u003E\u003C/a\u003E\u003C/h1\u003E\n\u003Cp\u003ESteamworks is a set of APIs made available by Valve to allow developers to create integrations with Steam.\u003C/p\u003E\n\u003Cp\u003EThis ranges from the simple things like getting the local player\u0027s name, to more complicated things like server lists and UGC (Workshop Stuff).\u003C/p\u003E\n\u003Ch1\u003EWhat is Facepunch.Steamworks?\u003Ca class=\u0022anchor\u0022 href=\u0022#whatisfacepunchsteamworks\u0022\u003E\u003Ci class=\u0022mdi mdi-link-variant\u0022\u003E\u003C/i\u003E\u003C/a\u003E\u003Ca name=\u0022whatisfacepunchsteamworks\u0022 class=\u0022anchor_offset\u0022\u003E\u003C/a\u003E\u003C/h1\u003E\n\u003Cp\u003EValve\u0027s Steamwork library is written in C\u002B\u002B. Due to the popularity of Unity a lot of game development is now done in C#.\u003C/p\u003E\n\u003Cp\u003E\u003Ca href=\u0022https://github.com/Facepunch/Facepunch.Steamworks\u0022\u003EFacepunch.Steamworks\u003C/a\u003E is a C# wrapper on top of Valve\u0027s steamwork library.\u003C/p\u003E\n\u003Ch1\u003EHow does it differ from Steamworks.Net?\u003Ca class=\u0022anchor\u0022 href=\u0022#howdoesitdifferfromsteamworksnet\u0022\u003E\u003Ci class=\u0022mdi mdi-link-variant\u0022\u003E\u003C/i\u003E\u003C/a\u003E\u003Ca name=\u0022howdoesitdifferfromsteamworksnet\u0022 class=\u0022anchor_offset\u0022\u003E\u003C/a\u003E\u003C/h1\u003E\n\u003Cp\u003E\u003Ca href=\u0022https://steamworks.github.io/\u0022\u003ESteamworks.NET\u003C/a\u003E aims to be a faithful wrapper with the C\u002B\u002B version. Facepunch.Steamworks is a re-interpretation of the Api in a C# world. Here\u0027s an example\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EGetting Friends List on Steamworks.Net\u003C/strong\u003E:\u003C/p\u003E\n\u003Cdiv data-generationtime=\u00220\u0022 class=\u0022code code-c#\u0022\u003E\u003Ccopy\u003E\u003Ci class=\u0022mdi mdi-content-copy\u0022\u003E\u003C/i\u003E\u003C/copy\u003E\u003Cspan class=\u0022keyword\u0022\u003Eint\u003C/span\u003E friendCount = \u003Cspan class=\u0022className\u0022\u003E\u003Ca href=\u0022/steamworks/SteamFriends\u0022\u003ESteamFriends\u003C/a\u003E\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003EGetFriendCount\u003C/span\u003E(EFriendFlags.k_EFriendFlagImmediate);\n\n\u003Cspan class=\u0022keyword\u0022\u003Efor\u003C/span\u003E (\u003Cspan class=\u0022keyword\u0022\u003Eint\u003C/span\u003E i = \u003Cspan class=\u0022number\u0022\u003E0\u003C/span\u003E; i \u0026lt; friendCount; \u002B\u002Bi) \n{\n\tCSteamID friendSteamId = \u003Cspan class=\u0022className\u0022\u003E\u003Ca href=\u0022/steamworks/SteamFriends\u0022\u003ESteamFriends\u003C/a\u003E\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003EGetFriendByIndex\u003C/span\u003E(i, EFriendFlags.k_EFriendFlagImmediate);\n\t\u003Cspan class=\u0022keyword\u0022\u003Estring\u003C/span\u003E friendName = \u003Cspan class=\u0022className\u0022\u003E\u003Ca href=\u0022/steamworks/SteamFriends\u0022\u003ESteamFriends\u003C/a\u003E\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003EGetFriendPersonaName\u003C/span\u003E(friendSteamId);\n\tEPersonaState friendState = \u003Cspan class=\u0022className\u0022\u003E\u003Ca href=\u0022/steamworks/SteamFriends\u0022\u003ESteamFriends\u003C/a\u003E\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003EGetFriendPersonaState\u003C/span\u003E(friendSteamId);\n\n\t\u003Cspan class=\u0022className\u0022\u003EDebug\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003ELog\u003C/span\u003E( \u003Cspan class=\u0022string\u0022\u003E$\u0022{friendName} is {friendState}\u0022\u003C/span\u003E);\n}\u003C/div\u003E\n\u003Cp\u003E\u003Cstrong\u003EGetting Friends List on Facepunch.Steamworks\u003C/strong\u003E:\u003C/p\u003E\n\u003Cdiv data-generationtime=\u00220\u0022 class=\u0022code code-c#\u0022\u003E\u003Ccopy\u003E\u003Ci class=\u0022mdi mdi-content-copy\u0022\u003E\u003C/i\u003E\u003C/copy\u003E\u003Cspan class=\u0022keyword\u0022\u003Eforeach\u003C/span\u003E ( \u003Cspan class=\u0022keyword\u0022\u003Evar\u003C/span\u003E friend \u003Cspan class=\u0022keyword\u0022\u003Ein\u003C/span\u003E \u003Cspan class=\u0022className\u0022\u003E\u003Ca href=\u0022/steamworks/SteamFriends\u0022\u003ESteamFriends\u003C/a\u003E\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003E\u003Ca href=\u0022/steamworks/SteamFriends.GetFriends\u0022\u003EGetFriends\u003C/a\u003E\u003C/span\u003E() )\n{\n    \u003Cspan class=\u0022className\u0022\u003EConsole\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003EWriteLine\u003C/span\u003E( \u003Cspan class=\u0022string\u0022\u003E$\u0022{friend.Id}: {friend.Name}\u0022\u003C/span\u003E );\n    \u003Cspan class=\u0022className\u0022\u003EConsole\u003C/span\u003E.\u003Cspan class=\u0022method\u0022\u003EWriteLine\u003C/span\u003E( \u003Cspan class=\u0022string\u0022\u003E$\u0022{friend.IsOnline} / {friend.SteamLevel}\u0022\u003C/span\u003E );\n}\u003C/div\u003E\u003Ch1\u003EWhere can I get it?\u003Ca class=\u0022anchor\u0022 href=\u0022#wherecanigetit\u0022\u003E\u003Ci class=\u0022mdi mdi-link-variant\u0022\u003E\u003C/i\u003E\u003C/a\u003E\u003Ca name=\u0022wherecanigetit\u0022 class=\u0022anchor_offset\u0022\u003E\u003C/a\u003E\u003C/h1\u003E\n\u003Cp\u003EYou can download a release on the \u003Ca href=\u0022https://github.com/Facepunch/Facepunch.Steamworks\u0022\u003EGithub Page\u003C/a\u003E.\u003C/p\u003E\n\u003Ch1\u003EHow to build from Master branch\u003Ca class=\u0022anchor\u0022 href=\u0022#howtobuildfrommasterbranch\u0022\u003E\u003Ci class=\u0022mdi mdi-link-variant\u0022\u003E\u003C/i\u003E\u003C/a\u003E\u003Ca name=\u0022howtobuildfrommasterbranch\u0022 class=\u0022anchor_offset\u0022\u003E\u003C/a\u003E\u003C/h1\u003E\n\u003Cp\u003EDownload the latest Steamworks SDK that Facepunch.Steamworks is compatible with. As of right now it is version 150, available for download \u003Ca href=\u0022https://partner.steamgames.com/downloads/steamworks_sdk.zip\u0022\u003Ehere\u003C/a\u003E\u003C/p\u003E\n\u003Cp\u003ECopy the following folder and it\u0027s contents into your Unity project: \u003Ccode\u003E\\sdk\\redistributable_bin\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003EClone the repository locally\u003C/p\u003E\n\u003Cp\u003EOpen the solution file (Facepunch.Steamworks.sln) in Visual Studio\u003C/p\u003E\n\u003Cp\u003EIn the toolbar select \u003Ccode\u003Ebuild \u0026gt; build solution\u003C/code\u003E\u003C/p\u003E\n\u003Cp\u003ENavigate to the Face.Steamworks folder and copy the contents of: \u003Ccode\u003E\\Facepunch.Steamworks\\bin\\Debug\\net46\u003C/code\u003E to your Unity project.\u003C/p\u003E\n\u003Cp\u003EThe last step is to set the \u003Ccode\u003E.dll\u003C/code\u003E files to have the correct settings. Follow these steps in Unity now that you\u0027ve copied the files over:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Cp\u003EFacepunch.Steamworks.Posix.dll:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EAny Platform: Unchecked\u003C/li\u003E\n\u003Cli\u003EInclude Platforms: Editor, Standalone\u003C/li\u003E\n\u003Cli\u003EPlatform Settings:\n\u003Cul\u003E\n\u003Cli\u003ECPU: Any\u003C/li\u003E\n\u003Cli\u003EOS: OSX\u003C/li\u003E\n\u003Cli\u003ESwitch tabs:\n\u003Cul\u003E\n\u003Cli\u003EWindows: all unchecked\u003C/li\u003E\n\u003Cli\u003ELinux and OSX: all checked\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003EFacepunch.Steamworks.Win32.dll:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EAny Platform: Checked\u003C/li\u003E\n\u003Cli\u003EInclude Platforms: Both Unchecked\u003C/li\u003E\n\u003Cli\u003EPlatform Settings:\n\u003Cul\u003E\n\u003Cli\u003ECPU: x86\u003C/li\u003E\n\u003Cli\u003EOS: Windows\u003C/li\u003E\n\u003Cli\u003ESwitch tabs:\n\u003Cul\u003E\n\u003Cli\u003EWindows: check x86\u003C/li\u003E\n\u003Cli\u003Eeverything else: Unchecked\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003Cli\u003E\u003Cp\u003EFacepunch.Steamworks.Win64.dll:\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EAny Platform: Checked\u003C/li\u003E\n\u003Cli\u003EInclude Platforms: Both Unchecked\u003C/li\u003E\n\u003Cli\u003EPlatform Settings:\n\u003Cul\u003E\n\u003Cli\u003ECPU: x86_64\u003C/li\u003E\n\u003Cli\u003EOS: Windows\u003C/li\u003E\n\u003Cli\u003ESwitch tabs:\n\u003Cul\u003E\n\u003Cli\u003EWindows: check x86_64\u003C/li\u003E\n\u003Cli\u003ELinux and OSX: Unchecked\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n\u003C/li\u003E\n\u003C/ul\u003E\n","footer":"Page views: 269,887\u003Cbr\u003EUpdated: A Long Time Ago","revisionId":544538,"pageLinks":[{"url":"/steamworks/","label":"View","icon":"file","description":""},{"url":"/steamworks/~edit","label":"Edit","icon":"pencil","description":""},{"url":"/steamworks/~history","label":"History","icon":"history","description":""}]}