using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using Facepunch.Steamworks.Data; namespace Facepunch.Steamworks { public class SteamServerStats : SteamServerClass { internal static ISteamGameServerStats Internal => Interface as ISteamGameServerStats; internal override void InitializeInterface( bool server ) { SetInterface( server, new ISteamGameServerStats( server ) ); } /// /// Downloads stats for the user /// If the user has no stats will return fail /// these stats will only be auto-updated for clients playing on the server /// public static async Task RequestUserStatsAsync( SteamId steamid ) { var r = await Internal.RequestUserStats( steamid ); if ( !r.HasValue ) return Result.Fail; return r.Value.Result; } /// /// Set the named stat for this user. Setting stats should follow the rules /// you defined in Steamworks. /// public static bool SetInt( SteamId steamid, string name, int stat ) { return Internal.SetUserStat( steamid, name, stat ); } /// /// Set the named stat for this user. Setting stats should follow the rules /// you defined in Steamworks. /// public static bool SetFloat( SteamId steamid, string name, float stat ) { return Internal.SetUserStat( steamid, name, stat ); } /// /// Get the named stat for this user. If getting the stat failed, will return /// defaultValue. You should have called Refresh for this userid - which downloads /// the stats from the backend. If you didn't call it this will always return defaultValue. /// public static int GetInt( SteamId steamid, string name, int defaultValue = 0 ) { int data = defaultValue; if ( !Internal.GetUserStat( steamid, name, ref data ) ) return defaultValue; return data; } /// /// Get the named stat for this user. If getting the stat failed, will return /// defaultValue. You should have called Refresh for this userid - which downloads /// the stats from the backend. If you didn't call it this will always return defaultValue. /// public static float GetFloat( SteamId steamid, string name, float defaultValue = 0 ) { float data = defaultValue; if ( !Internal.GetUserStat( steamid, name, ref data ) ) return defaultValue; return data; } /// /// Unlocks the specified achievement for the specified user. Must have called Refresh on a steamid first. /// Remember to use Commit after use. /// public static bool SetAchievement( SteamId steamid, string name ) { return Internal.SetUserAchievement( steamid, name ); } /// /// Resets the unlock status of an achievement for the specified user. Must have called Refresh on a steamid first. /// Remember to use Commit after use. /// public static bool ClearAchievement( SteamId steamid, string name ) { return Internal.ClearUserAchievement( steamid, name ); } /// /// Return true if available, exists and unlocked /// public static bool GetAchievement( SteamId steamid, string name ) { bool achieved = false; if ( !Internal.GetUserAchievement( steamid, name, ref achieved ) ) return false; return achieved; } /// /// Once you've set a stat change on a user you need to commit your changes. /// You can do that using this function. The callback will let you know if /// your action succeeded, but most of the time you can fire and forget. /// public static async Task StoreUserStats( SteamId steamid ) { var r = await Internal.StoreUserStats( steamid ); if ( !r.HasValue ) return Result.Fail; return r.Value.Result; } } }