// Decompiled with JetBrains decompiler // Type: Terraria.Social.Steam.AchievementsSocialModule // Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null // MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83 // Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe using Steamworks; using System; using System.Collections.Generic; using System.Threading; namespace Terraria.Social.Steam { public class AchievementsSocialModule : Terraria.Social.Base.AchievementsSocialModule { private const string FILE_NAME = "/achievements-steam.dat"; private Callback _userStatsReceived; private bool _areStatsReceived; private Dictionary _intStatCache = new Dictionary(); private Dictionary _floatStatCache = new Dictionary(); public override void Initialize() { // ISSUE: method pointer this._userStatsReceived = Callback.Create(new Callback.DispatchDelegate((object) this, __methodptr(OnUserStatsReceived))); SteamUserStats.RequestCurrentStats(); while (!this._areStatsReceived) { CoreSocialModule.Pulse(); Thread.Sleep(10); } } public override void Shutdown() => this.StoreStats(); public override bool IsAchievementCompleted(string name) { bool flag; return SteamUserStats.GetAchievement(name, ref flag) & flag; } public override byte[] GetEncryptionKey() { byte[] numArray = new byte[16]; byte[] bytes = BitConverter.GetBytes((ulong) SteamUser.GetSteamID().m_SteamID); Array.Copy((Array) bytes, (Array) numArray, 8); Array.Copy((Array) bytes, 0, (Array) numArray, 8, 8); return numArray; } public override string GetSavePath() => "/achievements-steam.dat"; private int GetIntStat(string name) { int num; if (this._intStatCache.TryGetValue(name, out num) || !SteamUserStats.GetStat(name, ref num)) return num; this._intStatCache.Add(name, num); return num; } private float GetFloatStat(string name) { float num; if (this._floatStatCache.TryGetValue(name, out num) || !SteamUserStats.GetStat(name, ref num)) return num; this._floatStatCache.Add(name, num); return num; } private bool SetFloatStat(string name, float value) { this._floatStatCache[name] = value; return SteamUserStats.SetStat(name, value); } public override void UpdateIntStat(string name, int value) { if (this.GetIntStat(name) >= value) return; this.SetIntStat(name, value); } private bool SetIntStat(string name, int value) { this._intStatCache[name] = value; return SteamUserStats.SetStat(name, value); } public override void UpdateFloatStat(string name, float value) { if ((double) this.GetFloatStat(name) >= (double) value) return; this.SetFloatStat(name, value); } public override void StoreStats() => SteamUserStats.StoreStats(); public override void CompleteAchievement(string name) => SteamUserStats.SetAchievement(name); private void OnUserStatsReceived(UserStatsReceived_t results) { if (results.m_nGameID != 105600L || !CSteamID.op_Equality((CSteamID) results.m_steamIDUser, SteamUser.GetSteamID())) return; this._areStatsReceived = true; } } }