À propos du projet
# Facepunch.Steamworks
Une autre implémentation C# de Steamworks, conçue pour être un wrapper moderne et facile à utiliser autour de l'API Steamworks. Elle vise à être une seule DLL C# sans dépendances natives autres que Steam lui-même, prenant en charge Windows, Linux et MacOS, y compris Unity et IL2CPP.
## Fonctionnalités
- Multiplateforme : Windows, Linux, MacOS
- Support Unity, y compris IL2CPP
- Callbacks asynchrones (callresults Steam) et événements (callbacks Steam)
- Une seule DLL C#, aucune DLL native tierce
- Open source sous licence MIT
- Prend en charge les systèmes d'exploitation 32 bits
## Pourquoi Cette Bibliothèque
L'auteur a trouvé les implémentations C# existantes de Steamworks insuffisantes : elles n'étaient pas vraiment idiomatiques en C#, obsolètes, nécessitaient des DLL natives, ne pouvaient pas être compilées en une DLL autonome dans Unity, n'étaient pas gratuites, ou avaient des licences restrictives. Cette bibliothèque vise à envelopper l'API Steamworks d'une manière qui la rend plus facile à utiliser.
## Exemples d'Utilisation
### Obtenir les Informations Utilisateur
```csharp
SteamClient.SteamId // Votre SteamId
SteamClient.Name // Votre Nom
```
### Liste d'Amis
```csharp
foreach ( var friend in SteamFriends.GetFriends() )
{
Console.WriteLine( $"{friend.Id}: {friend.Name}" );
Console.WriteLine( $"{friend.IsOnline} / {friend.SteamLevel}" );
friend.SendMessage( "Bonjour Ami" );
}
```
### Informations sur l'Application
```csharp
Console.WriteLine( SteamApps.GameLanguage );
var installDir = SteamApps.AppInstallDir( 4000 );
var fileinfo = await SteamApps.GetFileDetailsAsync( "hl2.exe" );
```
### Avatars
```csharp
var image = await SteamFriends.GetLargeAvatarAsync( steamid );
if ( !image.HasValue ) return DefaultImage;
return MakeTextureFromRGBA( image.Value.Data, image.Value.Width, image.Value.Height );
```
### Liste de Serveurs
```csharp
using ( var list = new ServerList.Internet() )
{
list.AddFilter( "map", "de_dust" );
await list.RunQueryAsync();
foreach ( var server in list.Responsive )
{
Console.WriteLine( $"{server.Address} {server.Name}" );
}
}
```
### Succès
Lister et débloquer des succès :
```csharp
foreach ( var a in SteamUserStats.Achievements )
{
Console.WriteLine( $"{a.Name} ({a.State})" );
}
var ach = new Achievement( "GM_PLAYED_WITH_GARRY" );
ach.Trigger();
```
### Voix
```csharp
SteamUser.VoiceRecord = KeyDown( "V" );
if ( SteamUser.HasVoiceData )
{
var bytesrwritten = SteamUser.ReadVoiceData( stream );
}
```
### Authentification
Authentification client et serveur :
```csharp
var ticket = SteamUser.GetAuthSessionTicket();
SteamServer.OnValidateAuthTicketResponse += ( steamid, ownerid, rsponse ) =>
{
if ( rsponse == AuthResponse.OK )
TellUserTheyCanBeOnServer( steamid );
else
KickUser( steamid );
};
if ( !SteamServer.BeginAuthSession( ticketData, clientSteamId ) )
{
KickUser( clientSteamId );
}
ticket.Cancel();
```
### Utilitaires
```csharp
SteamUtils.SecondsSinceAppActive;
SteamUtils.SecondsSinceComputerActive;
SteamUtils.IpCountry;
SteamUtils.UsingBatteryPower;
SteamUtils.CurrentBatteryPower;
SteamUtils.AppId;
SteamUtils.IsOverlayEnabled;
SteamUtils.IsSteamRunningInVR;
SteamUtils.IsSteamInBigPictureMode;
```
### Atelier
Télécharger, interroger et publier des éléments de l'atelier :
```csharp
SteamUGC.Download( 1717844711 );
var itemInfo = await Ugc.Item.Get( 1720164672 );
var q = Ugc.Query.All
.WithTag( "Fun" )
.WithTag( "Film" )
.MatchAllTags();
var result = await q.GetPageAsync( 1 );
var q = Ugc.UserQuery.All.CreatedByFriends();
var q = Ugc.UserQuery.All.FromSelf();
var result = await Ugc.Editor.NewCommunityFile
.WithTitle( "Mon Nouveau Fichier" )
.WithDescription( "Ceci est une description" )
.WithContent( "c:/dossier/addon/emplacement" )
.WithTag( "génial" )
.WithTag( "petit" )
.SubmitAsync( iProgressBar );
```
### Steam Cloud
```csharp
SteamRemoteStorage.FileWrite( "fichier.txt", fileContents );
var fileContents = SteamRemoteStorage.FileRead( "fichier.txt" );
foreach ( var file in SteamRemoteStorage.Files )
{
Console.WriteLine( $"{file} ({SteamRemoteStorage.FileSize(file)} {SteamRemoteStorage.FileTime( file )})" );
}
```
### Inventaire Steam
```csharp
foreach ( InventoryDef def in SteamInventory.Definitions )
{
Console.WriteLine( $"{def.Name}" );
}
var defs = await SteamInventory.GetDefinitionsWithPricesAsync();
var result = await SteamInventory.GetItems();
using ( result )
{
var items = result?.GetItems( bWithProperties );
foreach ( InventoryItem item in items )
{
Console.WriteLine( $"{item.Id} / {item.Quantity} / {item.Def.Name} " );
}
}
```
## Pour Commencer
### Initialisation du Client
```csharp
using Steamworks;
try
{
SteamClient.Init( 4000 );
}
catch ( System.Exception e )
{
// Impossible d'initialiser pour une raison quelconque (steam est fermé, etc.)
}
// Quand c'est terminé :
SteamClient.Shutdown();
```
### Initialisation du Serveur
```csharp
var serverInit = new SteamServerInit( "gmod", "Garry Mode" )
{
GamePort = 28015,
Secure = true,
QueryPort = 28016
};
try
{
Steamworks.SteamServer.Init( 4000, serverInit );
}
catch ( System.Exception )
{
// Impossible d'initialiser pour une raison quelconque (erreurs DLL, ports bloqués)
}
```
## Aide et Contribution
Les contributions sont les bienvenues via des demandes de tirage et des rapports de bogues. Pour de l'aide et des discussions, visitez le [Fil Steamworks](http://steamcommunity.com/groups/steamworks/discussions/0/1319961618833314524/). Il y a aussi un [wiki](https://wiki.facepunch.com/steamworks/) avec des exemples et des conseils.
## Licence
MIT - faites ce que vous voulez.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.