Showing preview only (385K chars total). Download the full file or copy to clipboard to get everything.
Repository: gibbed/SteamAchievementManager
Branch: master
Commit: de8b71048a0c
Files: 84
Total size: 362.9 KB
Directory structure:
gitextract_ytgc_t4t/
├── .appveyor.yml
├── .gitattributes
├── .gitignore
├── LICENSE.txt
├── README.md
├── SAM.API/
│ ├── CallHandle.cs
│ ├── Callback.cs
│ ├── Callbacks/
│ │ ├── AppDataChanged.cs
│ │ └── UserStatsReceived.cs
│ ├── Client.cs
│ ├── ClientInitializeException.cs
│ ├── ClientInitializeFailure.cs
│ ├── GlobalSuppressions.cs
│ ├── ICallback.cs
│ ├── INativeWrapper.cs
│ ├── Interfaces/
│ │ ├── ISteamApps001.cs
│ │ ├── ISteamApps008.cs
│ │ ├── ISteamClient018.cs
│ │ ├── ISteamUser012.cs
│ │ ├── ISteamUserStats013.cs
│ │ └── ISteamUtils005.cs
│ ├── LICENSE.txt
│ ├── NativeClass.cs
│ ├── NativeStrings.cs
│ ├── NativeWrapper.cs
│ ├── SAM.API.csproj
│ ├── SAM.API.csproj.DotSettings
│ ├── Steam.cs
│ ├── Types/
│ │ ├── AccountType.cs
│ │ ├── AppDataChanged.cs
│ │ ├── CallbackMessage.cs
│ │ ├── ItemRequestResult.cs
│ │ ├── UserItemsReceived.cs
│ │ ├── UserStatType.cs
│ │ ├── UserStatsReceived.cs
│ │ └── UserStatsStored.cs
│ └── Wrappers/
│ ├── SteamApps001.cs
│ ├── SteamApps008.cs
│ ├── SteamClient018.cs
│ ├── SteamUser012.cs
│ ├── SteamUserStats013.cs
│ └── SteamUtils005.cs
├── SAM.Game/
│ ├── DoubleBufferedListView.cs
│ ├── GlobalSuppressions.cs
│ ├── InvariantShorthand.cs
│ ├── KeyValue.cs
│ ├── KeyValueType.cs
│ ├── LICENSE.txt
│ ├── Manager.Designer.cs
│ ├── Manager.cs
│ ├── Manager.resx
│ ├── Program.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── SAM.Game.csproj
│ ├── SAM.Game.csproj.DotSettings
│ ├── Stats/
│ │ ├── AchievementDefinition.cs
│ │ ├── AchievementInfo.cs
│ │ ├── FloatStatDefinition.cs
│ │ ├── FloatStatInfo.cs
│ │ ├── IntStatInfo.cs
│ │ ├── IntegerStatDefinition.cs
│ │ ├── StatDefinition.cs
│ │ ├── StatFlags.cs
│ │ ├── StatInfo.cs
│ │ └── StatIsProtectedException.cs
│ ├── StreamHelpers.cs
│ ├── app.config
│ └── app.manifest
├── SAM.Picker/
│ ├── GameInfo.cs
│ ├── GamePicker.Designer.cs
│ ├── GamePicker.cs
│ ├── GamePicker.resx
│ ├── GlobalSuppressions.cs
│ ├── InvariantShorthand.cs
│ ├── LICENSE.txt
│ ├── LogoInfo.cs
│ ├── MyListView.cs
│ ├── Program.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── SAM.Picker.csproj
│ └── app.manifest
└── SAM.sln
================================================
FILE CONTENTS
================================================
================================================
FILE: .appveyor.yml
================================================
version: 7.0.{build}
branches:
only:
- master
skip_tags: true
skip_commits:
files:
- .github/*
- README.md
max_jobs: 1
image: Visual Studio 2019
clone_folder: c:\projects\SAM
cache:
- packages -> **\packages.config
- '%LocalAppData%\NuGet\Cache'
- '%LocalAppData%\NuGet\v3-cache'
install:
- git submodule update --init --recursive
configuration:
- Release
dotnet_csproj:
patch: true
file: '**\*.csproj'
version: '{version}'
assembly_version: '{version}'
file_version: '{version}'
informational_version: '{version}'
build:
project: SAM.sln
parallel: true
verbosity: minimal
before_build:
- nuget restore
after_build:
- set TZ=GMT
- git log . > git-log.txt
- 7z a -r -tzip -mx=9 -x!*/LICENSE.txt SteamAchievementManager-%APPVEYOR_BUILD_VERSION%.zip ./LICENSE.txt ./git-log.txt ./upload/*.exe ./upload/*.dll
artifacts:
- path: '*-*.zip'
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
**/Properties/launchSettings.json
private/
upload/
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Nuget personal access tokens and Credentials
nuget.config
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
.idea/
*.sln.iml
================================================
FILE: LICENSE.txt
================================================
zlib License
Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would
be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
================================================
FILE: README.md
================================================
# Steam Achievement Manager
Steam Achievement Manager (SAM) is a lightweight, portable application used to manage achievements and statistics in the popular PC gaming platform Steam. This application requires the [Steam client](https://store.steampowered.com/about/), a Steam account and network access. Steam must be running and the user must be logged in.
This is the code for SAM. The closed-source version originally released in 2008, last major release in 2011, and last updated in 2013 (a hotfix).
The code is being made available so that those interested can do as they like with it.
There are some changes to the code since the last closed-source release:
- General code maintenance to bring it into a more modern state.
- Icons have been replaced with ones from the Fugue Icons set.
- Version has been bumped to 7.0.x.x to indicate the open-source release.
[Download latest release](https://github.com/gibbed/SteamAchievementManager/releases/latest).
[](https://ci.appveyor.com/project/gibbed/steamachievementmanager/branch/master)
## Attribution
Most (if not all) icons are from the [Fugue Icons](https://p.yusukekamiyamane.com/) set.
================================================
FILE: SAM.API/CallHandle.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.API
{
public enum CallHandle : ulong
{
Invalid = 0,
}
}
================================================
FILE: SAM.API/Callback.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API
{
public abstract class Callback : ICallback
{
public delegate void CallbackFunction(IntPtr param);
public event CallbackFunction OnRun;
public abstract int Id { get; }
public abstract bool IsServer { get; }
public void Run(IntPtr param)
{
this.OnRun(param);
}
}
public abstract class Callback<TParameter> : ICallback
where TParameter : struct
{
public delegate void CallbackFunction(TParameter arg);
public event CallbackFunction OnRun;
public abstract int Id { get; }
public abstract bool IsServer { get; }
public void Run(IntPtr pvParam)
{
var data = (TParameter)Marshal.PtrToStructure(pvParam, typeof(TParameter));
this.OnRun(data);
}
}
}
================================================
FILE: SAM.API/Callbacks/AppDataChanged.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.API.Callbacks
{
public class AppDataChanged : Callback<Types.AppDataChanged>
{
public override int Id => 1001;
public override bool IsServer => false;
}
}
================================================
FILE: SAM.API/Callbacks/UserStatsReceived.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.API.Callbacks
{
public class UserStatsReceived : Callback<Types.UserStatsReceived>
{
public override int Id => 1101;
public override bool IsServer => false;
}
}
================================================
FILE: SAM.API/Client.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace SAM.API
{
public class Client : IDisposable
{
public Wrappers.SteamClient018 SteamClient;
public Wrappers.SteamUser012 SteamUser;
public Wrappers.SteamUserStats013 SteamUserStats;
public Wrappers.SteamUtils005 SteamUtils;
public Wrappers.SteamApps001 SteamApps001;
public Wrappers.SteamApps008 SteamApps008;
private bool _IsDisposed = false;
private int _Pipe;
private int _User;
private readonly List<ICallback> _Callbacks = new();
public void Initialize(long appId)
{
if (string.IsNullOrEmpty(Steam.GetInstallPath()) == true)
{
throw new ClientInitializeException(ClientInitializeFailure.GetInstallPath, "failed to get Steam install path");
}
if (appId != 0)
{
Environment.SetEnvironmentVariable("SteamAppId", appId.ToString(CultureInfo.InvariantCulture));
}
if (Steam.Load() == false)
{
throw new ClientInitializeException(ClientInitializeFailure.Load, "failed to load SteamClient");
}
this.SteamClient = Steam.CreateInterface<Wrappers.SteamClient018>("SteamClient018");
if (this.SteamClient == null)
{
throw new ClientInitializeException(ClientInitializeFailure.CreateSteamClient, "failed to create ISteamClient018");
}
this._Pipe = this.SteamClient.CreateSteamPipe();
if (this._Pipe == 0)
{
throw new ClientInitializeException(ClientInitializeFailure.CreateSteamPipe, "failed to create pipe");
}
this._User = this.SteamClient.ConnectToGlobalUser(this._Pipe);
if (this._User == 0)
{
throw new ClientInitializeException(ClientInitializeFailure.ConnectToGlobalUser, "failed to connect to global user");
}
this.SteamUtils = this.SteamClient.GetSteamUtils004(this._Pipe);
if (appId > 0 && this.SteamUtils.GetAppId() != (uint)appId)
{
throw new ClientInitializeException(ClientInitializeFailure.AppIdMismatch, "appID mismatch");
}
this.SteamUser = this.SteamClient.GetSteamUser012(this._User, this._Pipe);
this.SteamUserStats = this.SteamClient.GetSteamUserStats013(this._User, this._Pipe);
this.SteamApps001 = this.SteamClient.GetSteamApps001(this._User, this._Pipe);
this.SteamApps008 = this.SteamClient.GetSteamApps008(this._User, this._Pipe);
}
~Client()
{
this.Dispose(false);
}
protected virtual void Dispose(bool disposing)
{
if (this._IsDisposed == true)
{
return;
}
if (this.SteamClient != null && this._Pipe > 0)
{
if (this._User > 0)
{
this.SteamClient.ReleaseUser(this._Pipe, this._User);
this._User = 0;
}
this.SteamClient.ReleaseSteamPipe(this._Pipe);
this._Pipe = 0;
}
this._IsDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public TCallback CreateAndRegisterCallback<TCallback>()
where TCallback : ICallback, new()
{
TCallback callback = new();
this._Callbacks.Add(callback);
return callback;
}
private bool _RunningCallbacks;
public void RunCallbacks(bool server)
{
if (this._RunningCallbacks == true)
{
return;
}
this._RunningCallbacks = true;
Types.CallbackMessage message;
while (Steam.GetCallback(this._Pipe, out message, out _) == true)
{
var callbackId = message.Id;
foreach (ICallback callback in this._Callbacks.Where(
candidate => candidate.Id == callbackId &&
candidate.IsServer == server))
{
callback.Run(message.ParamPointer);
}
Steam.FreeLastCallback(this._Pipe);
}
this._RunningCallbacks = false;
}
}
}
================================================
FILE: SAM.API/ClientInitializeException.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
namespace SAM.API
{
public class ClientInitializeException : Exception
{
public readonly ClientInitializeFailure Failure;
public ClientInitializeException(ClientInitializeFailure failure)
{
this.Failure = failure;
}
public ClientInitializeException(ClientInitializeFailure failure, string message)
: base(message)
{
this.Failure = failure;
}
public ClientInitializeException(ClientInitializeFailure failure, string message, Exception innerException)
: base(message, innerException)
{
this.Failure = failure;
}
}
}
================================================
FILE: SAM.API/ClientInitializeFailure.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.API
{
public enum ClientInitializeFailure : byte
{
Unknown = 0,
GetInstallPath,
Load,
CreateSteamClient,
CreateSteamPipe,
ConnectToGlobalUser,
AppIdMismatch,
}
}
================================================
FILE: SAM.API/GlobalSuppressions.cs
================================================
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Scope = "member", Target = "SAM.API.NativeWrapper`1.#Call`1(System.IntPtr,System.Object[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Scope = "member", Target = "SAM.API.NativeWrapper`1.#Call`2(System.IntPtr,System.Object[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Scope = "member", Target = "SAM.API.NativeWrapper`1.#GetDelegate`1(System.IntPtr)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly", Scope = "member", Target = "SAM.API.Callback.#OnRun")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1009:DeclareEventHandlersCorrectly", Scope = "member", Target = "SAM.API.Callback`1.#OnRun")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "SAM.API.Callbacks")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "1#", Scope = "member", Target = "SAM.API.Steam.#GetCallback(System.Int32,SAM.API.Types.CallbackMessage&,System.Int32&)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "1#", Scope = "member", Target = "SAM.API.Wrappers.SteamUserStats007.#GetAchievementState(System.String,System.Boolean&)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "1#", Scope = "member", Target = "SAM.API.Wrappers.SteamUserStats007.#GetStatValue(System.String,System.Int32&)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "1#", Scope = "member", Target = "SAM.API.Wrappers.SteamUserStats007.#GetStatValue(System.String,System.Single&)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "1#", Scope = "member", Target = "SAM.API.Wrappers.SteamUtils005.#GetImageSize(System.Int32,System.Int32&,System.Int32&)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "2#", Scope = "member", Target = "SAM.API.Steam.#GetCallback(System.Int32,SAM.API.Types.CallbackMessage&,System.Int32&)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1021:AvoidOutParameters", MessageId = "2#", Scope = "member", Target = "SAM.API.Wrappers.SteamUtils005.#GetImageSize(System.Int32,System.Int32&,System.Int32&)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "member", Target = "SAM.API.Steam.#GetInstallPath()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "member", Target = "SAM.API.Wrappers.SteamApps003.#GetCurrentGameLanguage()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "member", Target = "SAM.API.Wrappers.SteamUser012.#GetSteamId()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "member", Target = "SAM.API.Wrappers.SteamUtils005.#GetAppId()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "member", Target = "SAM.API.Wrappers.SteamUtils005.#GetConnectedUniverse()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "member", Target = "SAM.API.Wrappers.SteamUtils005.#GetIPCountry()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible", Scope = "type", Target = "SAM.API.Callback`1+CallbackFunction")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible", Scope = "type", Target = "SAM.API.Callback+CallbackFunction")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1045:DoNotPassTypesByReference", MessageId = "0#", Scope = "member", Target = "SAM.API.Wrappers.SteamClient009.#CreateLocalUser(System.Int32&,SAM.API.Types.AccountType)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Client.#SteamApps001")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Client.#SteamApps003")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Client.#SteamClient")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Client.#SteamUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Client.#SteamUserStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Client.#SteamUtils")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps001.#GetAppData")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#GetAvailableGameLanguages")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#GetCurrentGameLanguage")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsCybercafe")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsDlcInstalled")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsLowViolence")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsSubscribed")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsSubscribedApp")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsVACBanned")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#ConnectToGlobalUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#CreateLocalUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#CreateSteamPipe")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetIPCCallCount")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamApps")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamFriends")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamGameServer")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamGameServerStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamGenericInterface")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamMasterServerUpdater")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamMatchmaking")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamMatchmakingServers")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamNetworking")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamRemoteStorage")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamUserStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamUtils")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#ReleaseSteamPipe")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#ReleaseUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#RunFrame")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#SetLocalIPBinding")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#SetWarningMessageHook")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#BeginAuthSession")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#CancelAuthTicket")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#DecompressVoice")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#EndAuthSession")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetAuthSessionTicket")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetCompressedVoice")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetHSteamUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetSteamID")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetUserDataFolder")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#InitiateGameConnection")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#LoggedOn")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#StartVoiceRecording")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#StopVoiceRecording")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#TerminateGameConnection")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#TrackAppUsageEvent")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#UserHasLicenseForApp")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#ClearAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#DownloadLeaderboardEntries")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#FindLeaderboard")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#FindOrCreateLeaderboard")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievementAndUnlockTime")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievementDisplayAttribute")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievementIcon")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetDownloadedLeaderboardEntry")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardDisplayType")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardEntryCount")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardName")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardSortMethod")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetNumberOfCurrentPlayers")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetStatFloat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetStatInteger")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserAchievementAndUnlockTime")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserStatFloat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserStatInt")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#IndicateAchievementProgress")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#RequestCurrentStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#RequestUserStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#ResetAllStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#SetAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#SetStatFloat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#SetStatInteger")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#StoreStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#UpdateAvgRateStat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#UploadLeaderboardScore")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetAPICallFailureReason")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetAPICallResult")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetAppID")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetConnectedUniverse")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetCSERIPPort")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetCurrentBatteryPower")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetImageRGBA")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetImageSize")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetIPCCallCount")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetIPCountry")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetSecondsSinceAppActive")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetSecondsSinceComputerActive")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetServerRealTime")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#IsAPICallCompleted")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#IsOverlayEnabled")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#OverlayNeedsPresent")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#RunFrame")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#SetOverlayNotificationPosition")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#SetWarningMessageHook")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.NativeWrapper`1.#Functions")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.NativeWrapper`1.#ObjectAddress")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.AppDataChanged.#Id")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.AppDataChanged.#Result")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.CallbackMessage.#Id")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.CallbackMessage.#ParamPointer")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.CallbackMessage.#ParamSize")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.CallbackMessage.#User")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.UserItemsReceived.#GameId")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.UserItemsReceived.#ItemCount")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.UserItemsReceived.#Unknown")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.UserStatsReceived.#GameId")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.UserStatsReceived.#Result")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.UserStatsStored.#GameId")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1051:DoNotDeclareVisibleInstanceFields", Scope = "member", Target = "SAM.API.Types.UserStatsStored.#Result")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1060:MovePInvokesToNativeMethodsClass", Scope = "member", Target = "SAM.API.Steam+Native.#GetProcAddress(System.IntPtr,System.String)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1060:MovePInvokesToNativeMethodsClass", Scope = "member", Target = "SAM.API.Steam+Native.#LoadLibraryEx(System.String,System.IntPtr,System.UInt32)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1060:MovePInvokesToNativeMethodsClass", Scope = "member", Target = "SAM.API.Steam+Native.#SetDllDirectory(System.String)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Auth", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#BeginAuthSession")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Auth", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#CancelAuthTicket")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Auth", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#EndAuthSession")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Auth", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetAuthSessionTicket")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Avg", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#UpdateAvgRateStat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cybercafe", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsCybercafe")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dlc", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsDlcInstalled")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Multiset", Scope = "member", Target = "SAM.API.Types.AccountType.#Multiset")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param", Scope = "member", Target = "SAM.API.ICallback.#Run(System.IntPtr)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param", Scope = "member", Target = "SAM.API.Types.CallbackMessage.#ParamPointer")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Param", Scope = "member", Target = "SAM.API.Types.CallbackMessage.#ParamSize")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "param", Scope = "type", Target = "SAM.API.Callback+CallbackFunction")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Utils", Scope = "member", Target = "SAM.API.Client.#SteamUtils")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Utils", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamUtils")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Utils", Scope = "member", Target = "SAM.API.Wrappers.SteamClient009.#GetISteamUtils`1(System.Int32,System.String)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Utils", Scope = "member", Target = "SAM.API.Wrappers.SteamClient009.#GetSteamUtils004(System.Int32)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Utils", Scope = "type", Target = "SAM.API.Interfaces.ISteamUtils005")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Utils", Scope = "type", Target = "SAM.API.Wrappers.SteamUtils005")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "API")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "API", Scope = "namespace", Target = "SAM.API")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "API", Scope = "namespace", Target = "SAM.API.Callbacks")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "API", Scope = "namespace", Target = "SAM.API.Interfaces")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "API", Scope = "namespace", Target = "SAM.API.Types")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "API", Scope = "namespace", Target = "SAM.API.Wrappers")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "OK", Scope = "member", Target = "SAM.API.Types.ItemRequestResult.#OK")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "RGBA", Scope = "member", Target = "SAM.API.Wrappers.SteamUtils005.#GetImageRGBA(System.Int32,System.Byte[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SAM")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SAM", Scope = "namespace", Target = "SAM.API")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SAM", Scope = "namespace", Target = "SAM.API.Callbacks")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SAM", Scope = "namespace", Target = "SAM.API.Interfaces")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SAM", Scope = "namespace", Target = "SAM.API.Types")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SAM", Scope = "namespace", Target = "SAM.API.Wrappers")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Scope = "member", Target = "SAM.API.Callback.#OnRun")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Scope = "member", Target = "SAM.API.Callback`1.#OnRun")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "int", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserStatInt")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "integer", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetStatInteger")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "integer", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#SetStatInteger")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "pointer", Scope = "member", Target = "SAM.API.NativeWrapper`1.#Call`1(System.IntPtr,System.Object[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "pointer", Scope = "member", Target = "SAM.API.NativeWrapper`1.#Call`2(System.IntPtr,System.Object[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "pointer", Scope = "member", Target = "SAM.API.NativeWrapper`1.#GetDelegate`1(System.IntPtr)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "pointer", Scope = "member", Target = "SAM.API.NativeWrapper`1.#GetFunction`1(System.IntPtr)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1725:ParameterNamesShouldMatchBaseDeclaration", MessageId = "0#", Scope = "member", Target = "SAM.API.Callback`1.#Run(System.IntPtr)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.API.NativeStrings.#PointerToString(System.Byte*)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.API.NativeStrings.#PointerToString(System.Byte*,System.Int32)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Interfaces.ISteamApps001")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Interfaces.ISteamApps003")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Interfaces.ISteamClient009")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Interfaces.ISteamUser012")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Interfaces.ISteamUtils005")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Types.AppDataChanged")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Types.CallbackMessage")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Types.UserItemsReceived")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Types.UserStatsReceived")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1815:OverrideEqualsAndOperatorEqualsOnValueTypes", Scope = "type", Target = "SAM.API.Types.UserStatsStored")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps001.#GetAppData")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#GetAvailableGameLanguages")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#GetCurrentGameLanguage")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsCybercafe")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsDlcInstalled")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsLowViolence")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsSubscribed")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsSubscribedApp")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamApps003.#IsVACBanned")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#ConnectToGlobalUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#CreateLocalUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#CreateSteamPipe")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetIPCCallCount")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamApps")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamFriends")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamGameServer")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamGameServerStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamGenericInterface")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamMasterServerUpdater")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamMatchmaking")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamMatchmakingServers")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamNetworking")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamRemoteStorage")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamUserStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#GetISteamUtils")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#ReleaseSteamPipe")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#ReleaseUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#RunFrame")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#SetLocalIPBinding")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamClient009.#SetWarningMessageHook")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#BeginAuthSession")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#CancelAuthTicket")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#DecompressVoice")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#EndAuthSession")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetAuthSessionTicket")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetCompressedVoice")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetHSteamUser")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetSteamID")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#GetUserDataFolder")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#InitiateGameConnection")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#LoggedOn")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#StartVoiceRecording")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#StopVoiceRecording")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#TerminateGameConnection")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#TrackAppUsageEvent")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUser012.#UserHasLicenseForApp")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#ClearAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#DownloadLeaderboardEntries")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#FindLeaderboard")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#FindOrCreateLeaderboard")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievementAndUnlockTime")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievementDisplayAttribute")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetAchievementIcon")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetDownloadedLeaderboardEntry")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardDisplayType")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardEntryCount")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardName")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetLeaderboardSortMethod")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetNumberOfCurrentPlayers")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetStatFloat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetStatInteger")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserAchievementAndUnlockTime")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserStatFloat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#GetUserStatInt")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#IndicateAchievementProgress")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#RequestCurrentStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#RequestUserStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#ResetAllStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#SetAchievement")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#SetStatFloat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#SetStatInteger")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#StoreStats")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#UpdateAvgRateStat")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUserStats007.#UploadLeaderboardScore")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetAPICallFailureReason")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetAPICallResult")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetAppID")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetConnectedUniverse")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetCSERIPPort")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetCurrentBatteryPower")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetImageRGBA")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetImageSize")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetIPCCallCount")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetIPCountry")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetSecondsSinceAppActive")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetSecondsSinceComputerActive")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#GetServerRealTime")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#IsAPICallCompleted")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#IsOverlayEnabled")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#OverlayNeedsPresent")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#RunFrame")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#SetOverlayNotificationPosition")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Interfaces.ISteamUtils005.#SetWarningMessageHook")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.NativeWrapper`1.#ObjectAddress")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2111:PointersShouldNotBeVisible", Scope = "member", Target = "SAM.API.Types.CallbackMessage.#ParamPointer")]
================================================
FILE: SAM.API/ICallback.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
namespace SAM.API
{
public interface ICallback
{
int Id { get; }
bool IsServer { get; }
void Run(IntPtr param);
}
}
================================================
FILE: SAM.API/INativeWrapper.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
namespace SAM.API
{
public interface INativeWrapper
{
void SetupFunctions(IntPtr objectAddress);
}
}
================================================
FILE: SAM.API/Interfaces/ISteamApps001.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API.Interfaces
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ISteamApps001
{
public IntPtr GetAppData;
}
}
================================================
FILE: SAM.API/Interfaces/ISteamApps008.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API.Interfaces
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ISteamApps008
{
public IntPtr IsSubscribed;
public IntPtr IsLowViolence;
public IntPtr IsCybercafe;
public IntPtr IsVACBanned;
public IntPtr GetCurrentGameLanguage;
public IntPtr GetAvailableGameLanguages;
public IntPtr IsSubscribedApp;
public IntPtr IsDlcInstalled;
public IntPtr GetEarliestPurchaseUnixTime;
public IntPtr IsSubscribedFromFreeWeekend;
public IntPtr GetDLCCount;
public IntPtr GetDLCDataByIndex;
public IntPtr InstallDLC;
public IntPtr UninstallDLC;
public IntPtr RequestAppProofOfPurchaseKey;
public IntPtr GetCurrentBetaName;
public IntPtr MarkContentCorrupt;
public IntPtr GetInstalledDepots;
public IntPtr GetAppInstallDir;
public IntPtr IsAppInstalled;
public IntPtr GetAppOwner;
public IntPtr GetLaunchQueryParam;
public IntPtr GetDlcDownloadProgress;
public IntPtr GetAppBuildId;
public IntPtr RequestAllProofOfPurchaseKeys;
public IntPtr GetFileDetails;
public IntPtr GetLaunchCommandLine;
public IntPtr IsSubscribedFromFamilySharing;
}
}
================================================
FILE: SAM.API/Interfaces/ISteamClient018.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API.Interfaces
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ISteamClient018
{
public IntPtr CreateSteamPipe;
public IntPtr ReleaseSteamPipe;
public IntPtr ConnectToGlobalUser;
public IntPtr CreateLocalUser;
public IntPtr ReleaseUser;
public IntPtr GetISteamUser;
public IntPtr GetISteamGameServer;
public IntPtr SetLocalIPBinding;
public IntPtr GetISteamFriends;
public IntPtr GetISteamUtils;
public IntPtr GetISteamMatchmaking;
public IntPtr GetISteamMatchmakingServers;
public IntPtr GetISteamGenericInterface;
public IntPtr GetISteamUserStats;
public IntPtr GetISteamGameServerStats;
public IntPtr GetISteamApps;
public IntPtr GetISteamNetworking;
public IntPtr GetISteamRemoteStorage;
public IntPtr GetISteamScreenshots;
public IntPtr GetISteamGameSearch;
public IntPtr RunFrame;
public IntPtr GetIPCCallCount;
public IntPtr SetWarningMessageHook;
public IntPtr ShutdownIfAllPipesClosed;
public IntPtr GetISteamHTTP;
public IntPtr DEPRECATED_GetISteamUnifiedMessages;
public IntPtr GetISteamController;
public IntPtr GetISteamUGC;
public IntPtr GetISteamAppList;
public IntPtr GetISteamMusic;
public IntPtr GetISteamMusicRemote;
public IntPtr GetISteamHTMLSurface;
public IntPtr DEPRECATED_Set_SteamAPI_CPostAPIResultInProcess;
public IntPtr DEPRECATED_Remove_SteamAPI_CPostAPIResultInProcess;
public IntPtr Set_SteamAPI_CCheckCallbackRegisteredInProcess;
public IntPtr GetISteamInventory;
public IntPtr GetISteamVideo;
public IntPtr GetISteamParentalSettings;
public IntPtr GetISteamInput;
public IntPtr GetISteamParties;
}
}
================================================
FILE: SAM.API/Interfaces/ISteamUser012.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API.Interfaces
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ISteamUser012
{
public IntPtr GetHSteamUser;
public IntPtr LoggedOn;
public IntPtr GetSteamID;
public IntPtr InitiateGameConnection;
public IntPtr TerminateGameConnection;
public IntPtr TrackAppUsageEvent;
public IntPtr GetUserDataFolder;
public IntPtr StartVoiceRecording;
public IntPtr StopVoiceRecording;
public IntPtr GetCompressedVoice;
public IntPtr DecompressVoice;
public IntPtr GetAuthSessionTicket;
public IntPtr BeginAuthSession;
public IntPtr EndAuthSession;
public IntPtr CancelAuthTicket;
public IntPtr UserHasLicenseForApp;
}
}
================================================
FILE: SAM.API/Interfaces/ISteamUserStats013.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API.Interfaces
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class ISteamUserStats013
{
public IntPtr GetStatFloat;
public IntPtr GetStatInteger;
public IntPtr SetStatFloat;
public IntPtr SetStatInteger;
public IntPtr UpdateAvgRateStat;
public IntPtr GetAchievement;
public IntPtr SetAchievement;
public IntPtr ClearAchievement;
public IntPtr GetAchievementAndUnlockTime;
public IntPtr StoreStats;
public IntPtr GetAchievementIcon;
public IntPtr GetAchievementDisplayAttribute;
public IntPtr IndicateAchievementProgress;
public IntPtr GetNumAchievements;
public IntPtr GetAchievementName;
public IntPtr RequestUserStats;
public IntPtr GetUserStatFloat;
public IntPtr GetUserStatInt;
public IntPtr GetUserAchievement;
public IntPtr GetUserAchievementAndUnlockTime;
public IntPtr ResetAllStats;
public IntPtr FindOrCreateLeaderboard;
public IntPtr FindLeaderboard;
public IntPtr GetLeaderboardName;
public IntPtr GetLeaderboardEntryCount;
public IntPtr GetLeaderboardSortMethod;
public IntPtr GetLeaderboardDisplayType;
public IntPtr DownloadLeaderboardEntries;
public IntPtr DownloadLeaderboardEntriesForUsers;
public IntPtr GetDownloadedLeaderboardEntry;
public IntPtr UploadLeaderboardScore;
public IntPtr AttachLeaderboardUGC;
public IntPtr GetNumberOfCurrentPlayers;
public IntPtr RequestGlobalAchievementPercentages;
public IntPtr GetMostAchievedAchievementInfo;
public IntPtr GetNextMostAchievedAchievementInfo;
public IntPtr GetAchievementAchievedPercent;
public IntPtr RequestGlobalStats;
public IntPtr GetGlobalStatFloat;
public IntPtr GetGlobalStatInteger;
public IntPtr GetGlobalStatHistoryFloat;
public IntPtr GetGlobalStatHistoryInteger;
public IntPtr GetAchievementProgressLimitsFloat;
public IntPtr GetAchievementProgressLimitsInteger;
}
}
================================================
FILE: SAM.API/Interfaces/ISteamUtils005.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API.Interfaces
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ISteamUtils005
{
public IntPtr GetSecondsSinceAppActive;
public IntPtr GetSecondsSinceComputerActive;
public IntPtr GetConnectedUniverse;
public IntPtr GetServerRealTime;
public IntPtr GetIPCountry;
public IntPtr GetImageSize;
public IntPtr GetImageRGBA;
public IntPtr GetCSERIPPort;
public IntPtr GetCurrentBatteryPower;
public IntPtr GetAppID;
public IntPtr SetOverlayNotificationPosition;
public IntPtr IsAPICallCompleted;
public IntPtr GetAPICallFailureReason;
public IntPtr GetAPICallResult;
public IntPtr RunFrame;
public IntPtr GetIPCCallCount;
public IntPtr SetWarningMessageHook;
public IntPtr IsOverlayEnabled;
public IntPtr OverlayNeedsPresent;
}
}
================================================
FILE: SAM.API/LICENSE.txt
================================================
zlib License
Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would
be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
================================================
FILE: SAM.API/NativeClass.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API
{
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
internal struct NativeClass
{
public IntPtr VirtualTable;
}
}
================================================
FILE: SAM.API/NativeStrings.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
using System.Text;
using Microsoft.Win32.SafeHandles;
namespace SAM.API
{
internal class NativeStrings
{
public sealed class StringHandle : SafeHandleZeroOrMinusOneIsInvalid
{
internal StringHandle(IntPtr preexistingHandle, bool ownsHandle)
: base(ownsHandle)
{
this.SetHandle(preexistingHandle);
}
public IntPtr Handle
{
get { return this.handle; }
}
protected override bool ReleaseHandle()
{
if (handle != IntPtr.Zero)
{
Marshal.FreeHGlobal(handle);
handle = IntPtr.Zero;
return true;
}
return false;
}
}
public static unsafe StringHandle StringToStringHandle(string value)
{
if (value == null)
{
return new StringHandle(IntPtr.Zero, true);
}
var bytes = Encoding.UTF8.GetBytes(value);
var length = bytes.Length;
var p = Marshal.AllocHGlobal(length + 1);
Marshal.Copy(bytes, 0, p, bytes.Length);
((byte*)p)[length] = 0;
return new StringHandle(p, true);
}
public static unsafe string PointerToString(sbyte* bytes)
{
if (bytes == null)
{
return null;
}
int running = 0;
var b = bytes;
if (*b == 0)
{
return string.Empty;
}
while ((*b++) != 0)
{
running++;
}
return new string(bytes, 0, running, Encoding.UTF8);
}
public static unsafe string PointerToString(byte* bytes)
{
return PointerToString((sbyte*)bytes);
}
public static unsafe string PointerToString(IntPtr nativeData)
{
return PointerToString((sbyte*)nativeData.ToPointer());
}
public static unsafe string PointerToString(sbyte* bytes, int length)
{
if (bytes == null)
{
return null;
}
int running = 0;
var b = bytes;
if (length == 0 || *b == 0)
{
return string.Empty;
}
while ((*b++) != 0 &&
running < length)
{
running++;
}
return new string(bytes, 0, running, Encoding.UTF8);
}
public static unsafe string PointerToString(byte* bytes, int length)
{
return PointerToString((sbyte*)bytes, length);
}
public static unsafe string PointerToString(IntPtr nativeData, int length)
{
return PointerToString((sbyte*)nativeData.ToPointer(), length);
}
}
}
================================================
FILE: SAM.API/NativeWrapper.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace SAM.API
{
public abstract class NativeWrapper<TNativeFunctions> : INativeWrapper
{
protected IntPtr ObjectAddress;
protected TNativeFunctions Functions;
public override string ToString()
{
return $"Steam Interface<{typeof(TNativeFunctions)}> #{this.ObjectAddress.ToInt32():X8}";
}
public void SetupFunctions(IntPtr objectAddress)
{
this.ObjectAddress = objectAddress;
var iface = (NativeClass)Marshal.PtrToStructure(
this.ObjectAddress,
typeof(NativeClass));
this.Functions = (TNativeFunctions)Marshal.PtrToStructure(
iface.VirtualTable,
typeof(TNativeFunctions));
}
private readonly Dictionary<IntPtr, Delegate> _FunctionCache = new();
protected Delegate GetDelegate<TDelegate>(IntPtr pointer)
{
if (this._FunctionCache.TryGetValue(pointer, out var function) == false)
{
function = Marshal.GetDelegateForFunctionPointer(pointer, typeof(TDelegate));
this._FunctionCache[pointer] = function;
}
return function;
}
protected TDelegate GetFunction<TDelegate>(IntPtr pointer)
where TDelegate : class
{
return (TDelegate)((object)this.GetDelegate<TDelegate>(pointer));
}
protected void Call<TDelegate>(IntPtr pointer, params object[] args)
{
this.GetDelegate<TDelegate>(pointer).DynamicInvoke(args);
}
protected TReturn Call<TReturn, TDelegate>(IntPtr pointer, params object[] args)
{
return (TReturn)this.GetDelegate<TDelegate>(pointer).DynamicInvoke(args);
}
}
}
================================================
FILE: SAM.API/SAM.API.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Company>Gibbed</Company>
<Authors>Gibbed</Authors>
<Description></Description>
<Copyright>Copyright © Gibbed 2019</Copyright>
</PropertyGroup>
<PropertyGroup>
<Version>7.0.0</Version>
<AssemblyVersion>7.0.0.0</AssemblyVersion>
<FileVersion>7.0.0.0</FileVersion>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Pink.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<RepositoryUrl>https://github.com/gibbed/SteamAchievementManager/</RepositoryUrl>
<RepositoryType>Git</RepositoryType>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<LangVersion>9.0</LangVersion>
<Platforms>x86</Platforms>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
</Project>
================================================
FILE: SAM.API/SAM.API.csproj.DotSettings
================================================
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeEditing/Localization/Localizable/@EntryValue">No</s:String></wpf:ResourceDictionary>
================================================
FILE: SAM.API/Steam.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace SAM.API
{
public static class Steam
{
private struct Native
{
[DllImport("kernel32.dll", SetLastError = true, BestFitMapping = false, ThrowOnUnmappableChar = true)]
internal static extern IntPtr GetProcAddress(IntPtr module, string name);
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern IntPtr LoadLibraryEx(string path, IntPtr file, uint flags);
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool SetDllDirectory(string path);
internal const uint LoadWithAlteredSearchPath = 8;
}
private static Delegate GetExportDelegate<TDelegate>(IntPtr module, string name)
{
IntPtr address = Native.GetProcAddress(module, name);
return address == IntPtr.Zero ? null : Marshal.GetDelegateForFunctionPointer(address, typeof(TDelegate));
}
private static TDelegate GetExportFunction<TDelegate>(IntPtr module, string name)
where TDelegate : class
{
return (TDelegate)((object)GetExportDelegate<TDelegate>(module, name));
}
private static IntPtr _Handle = IntPtr.Zero;
public static string GetInstallPath()
{
return (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\Software\Valve\Steam", "InstallPath", null);
}
[UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private delegate IntPtr NativeCreateInterface(string version, IntPtr returnCode);
private static NativeCreateInterface _CallCreateInterface;
public static TClass CreateInterface<TClass>(string version)
where TClass : INativeWrapper, new()
{
IntPtr address = _CallCreateInterface(version, IntPtr.Zero);
if (address == IntPtr.Zero)
{
return default;
}
TClass instance = new();
instance.SetupFunctions(address);
return instance;
}
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeSteamGetCallback(int pipe, out Types.CallbackMessage message, out int call);
private static NativeSteamGetCallback _CallSteamBGetCallback;
public static bool GetCallback(int pipe, out Types.CallbackMessage message, out int call)
{
return _CallSteamBGetCallback(pipe, out message, out call);
}
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeSteamFreeLastCallback(int pipe);
private static NativeSteamFreeLastCallback _CallSteamFreeLastCallback;
public static bool FreeLastCallback(int pipe)
{
return _CallSteamFreeLastCallback(pipe);
}
public static bool Load()
{
if (_Handle != IntPtr.Zero)
{
return true;
}
string path = GetInstallPath();
if (path == null)
{
return false;
}
Native.SetDllDirectory(path + ";" + Path.Combine(path, "bin"));
path = Path.Combine(path, "steamclient.dll");
IntPtr module = Native.LoadLibraryEx(path, IntPtr.Zero, Native.LoadWithAlteredSearchPath);
if (module == IntPtr.Zero)
{
return false;
}
_CallCreateInterface = GetExportFunction<NativeCreateInterface>(module, "CreateInterface");
if (_CallCreateInterface == null)
{
return false;
}
_CallSteamBGetCallback = GetExportFunction<NativeSteamGetCallback>(module, "Steam_BGetCallback");
if (_CallSteamBGetCallback == null)
{
return false;
}
_CallSteamFreeLastCallback = GetExportFunction<NativeSteamFreeLastCallback>(module, "Steam_FreeLastCallback");
if (_CallSteamFreeLastCallback == null)
{
return false;
}
_Handle = module;
return true;
}
}
}
================================================
FILE: SAM.API/Types/AccountType.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.API.Types
{
public enum AccountType : int
{
Invalid = 0,
Individual = 1,
Multiset = 2,
GameServer = 3,
AnonGameServer = 4,
Pending = 5,
ContentServer = 6,
Clan = 7,
Chat = 8,
P2PSuperSeeder = 9,
}
}
================================================
FILE: SAM.API/Types/AppDataChanged.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System.Runtime.InteropServices;
namespace SAM.API.Types
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct AppDataChanged
{
public uint Id;
public bool Result;
}
}
================================================
FILE: SAM.API/Types/CallbackMessage.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
namespace SAM.API.Types
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct CallbackMessage
{
public int User;
public int Id;
public IntPtr ParamPointer;
public int ParamSize;
}
}
================================================
FILE: SAM.API/Types/ItemRequestResult.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.API.Types
{
public enum ItemRequestResult : int
{
InvalidValue = -1,
OK = 0,
Denied = 1,
ServerError = 2,
Timeout = 3,
Invalid = 4,
NoMatch = 5,
UnknownError = 6,
NotLoggedOn = 7,
}
}
================================================
FILE: SAM.API/Types/UserItemsReceived.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System.Runtime.InteropServices;
namespace SAM.API.Types
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct UserItemsReceived
{
public ulong GameId;
public int Unknown;
public int ItemCount;
}
}
================================================
FILE: SAM.API/Types/UserStatType.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.API.Types
{
public enum UserStatType
{
Invalid = 0,
Integer = 1,
Int = Integer,
Float = 2,
AverageRate = 3,
Achievements = 4,
GroupAchievements = 5,
}
}
================================================
FILE: SAM.API/Types/UserStatsReceived.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System.Runtime.InteropServices;
namespace SAM.API.Types
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct UserStatsReceived
{
public ulong GameId;
public int Result;
public ulong SteamIdUser;
}
}
================================================
FILE: SAM.API/Types/UserStatsStored.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System.Runtime.InteropServices;
namespace SAM.API.Types
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct UserStatsStored
{
public ulong GameId;
public int Result;
}
}
================================================
FILE: SAM.API/Wrappers/SteamApps001.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
using SAM.API.Interfaces;
namespace SAM.API.Wrappers
{
public class SteamApps001 : NativeWrapper<ISteamApps001>
{
#region GetAppData
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate int NativeGetAppData(
IntPtr self,
uint appId,
IntPtr key,
IntPtr value,
int valueLength);
public string GetAppData(uint appId, string key)
{
using (var nativeHandle = NativeStrings.StringToStringHandle(key))
{
const int valueLength = 1024;
var valuePointer = Marshal.AllocHGlobal(valueLength);
int result = this.Call<int, NativeGetAppData>(
this.Functions.GetAppData,
this.ObjectAddress,
appId,
nativeHandle.Handle,
valuePointer,
valueLength);
var value = result == 0 ? null : NativeStrings.PointerToString(valuePointer, valueLength);
Marshal.FreeHGlobal(valuePointer);
return value;
}
}
#endregion
}
}
================================================
FILE: SAM.API/Wrappers/SteamApps008.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
using SAM.API.Interfaces;
namespace SAM.API.Wrappers
{
public class SteamApps008 : NativeWrapper<ISteamApps008>
{
#region IsSubscribed
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeIsSubscribedApp(IntPtr self, uint gameId);
public bool IsSubscribedApp(uint gameId)
{
return this.Call<bool, NativeIsSubscribedApp>(this.Functions.IsSubscribedApp, this.ObjectAddress, gameId);
}
#endregion
#region GetCurrentGameLanguage
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate IntPtr NativeGetCurrentGameLanguage(IntPtr self);
public string GetCurrentGameLanguage()
{
var languagePointer = this.Call<IntPtr, NativeGetCurrentGameLanguage>(
this.Functions.GetCurrentGameLanguage,
this.ObjectAddress);
return NativeStrings.PointerToString(languagePointer);
}
#endregion
}
}
================================================
FILE: SAM.API/Wrappers/SteamClient018.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
using SAM.API.Interfaces;
namespace SAM.API.Wrappers
{
public class SteamClient018 : NativeWrapper<ISteamClient018>
{
#region CreateSteamPipe
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate int NativeCreateSteamPipe(IntPtr self);
public int CreateSteamPipe()
{
return this.Call<int, NativeCreateSteamPipe>(this.Functions.CreateSteamPipe, this.ObjectAddress);
}
#endregion
#region ReleaseSteamPipe
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeReleaseSteamPipe(IntPtr self, int pipe);
public bool ReleaseSteamPipe(int pipe)
{
return this.Call<bool, NativeReleaseSteamPipe>(this.Functions.ReleaseSteamPipe, this.ObjectAddress, pipe);
}
#endregion
#region CreateLocalUser
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate int NativeCreateLocalUser(IntPtr self, ref int pipe, Types.AccountType type);
public int CreateLocalUser(ref int pipe, Types.AccountType type)
{
var call = this.GetFunction<NativeCreateLocalUser>(this.Functions.CreateLocalUser);
return call(this.ObjectAddress, ref pipe, type);
}
#endregion
#region ConnectToGlobalUser
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate int NativeConnectToGlobalUser(IntPtr self, int pipe);
public int ConnectToGlobalUser(int pipe)
{
return this.Call<int, NativeConnectToGlobalUser>(
this.Functions.ConnectToGlobalUser,
this.ObjectAddress,
pipe);
}
#endregion
#region ReleaseUser
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate void NativeReleaseUser(IntPtr self, int pipe, int user);
public void ReleaseUser(int pipe, int user)
{
this.Call<NativeReleaseUser>(this.Functions.ReleaseUser, this.ObjectAddress, pipe, user);
}
#endregion
#region SetLocalIPBinding
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate void NativeSetLocalIPBinding(IntPtr self, uint host, ushort port);
public void SetLocalIPBinding(uint host, ushort port)
{
this.Call<NativeSetLocalIPBinding>(this.Functions.SetLocalIPBinding, this.ObjectAddress, host, port);
}
#endregion
#region GetISteamUser
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate IntPtr NativeGetISteamUser(IntPtr self, int user, int pipe, IntPtr version);
private TClass GetISteamUser<TClass>(int user, int pipe, string version)
where TClass : INativeWrapper, new()
{
using (var nativeVersion = NativeStrings.StringToStringHandle(version))
{
IntPtr address = this.Call<IntPtr, NativeGetISteamUser>(
this.Functions.GetISteamUser,
this.ObjectAddress,
user,
pipe,
nativeVersion.Handle);
TClass result = new();
result.SetupFunctions(address);
return result;
}
}
#endregion
#region GetSteamUser012
public SteamUser012 GetSteamUser012(int user, int pipe)
{
return this.GetISteamUser<SteamUser012>(user, pipe, "SteamUser012");
}
#endregion
#region GetISteamUserStats
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate IntPtr NativeGetISteamUserStats(IntPtr self, int user, int pipe, IntPtr version);
private TClass GetISteamUserStats<TClass>(int user, int pipe, string version)
where TClass : INativeWrapper, new()
{
using (var nativeVersion = NativeStrings.StringToStringHandle(version))
{
IntPtr address = this.Call<IntPtr, NativeGetISteamUserStats>(
this.Functions.GetISteamUserStats,
this.ObjectAddress,
user,
pipe,
nativeVersion.Handle);
TClass result = new();
result.SetupFunctions(address);
return result;
}
}
#endregion
#region GetSteamUserStats013
public SteamUserStats013 GetSteamUserStats013(int user, int pipe)
{
return this.GetISteamUserStats<SteamUserStats013>(user, pipe, "STEAMUSERSTATS_INTERFACE_VERSION013");
}
#endregion
#region GetISteamUtils
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate IntPtr NativeGetISteamUtils(IntPtr self, int pipe, IntPtr version);
public TClass GetISteamUtils<TClass>(int pipe, string version)
where TClass : INativeWrapper, new()
{
using (var nativeVersion = NativeStrings.StringToStringHandle(version))
{
IntPtr address = this.Call<IntPtr, NativeGetISteamUtils>(
this.Functions.GetISteamUtils,
this.ObjectAddress,
pipe,
nativeVersion.Handle);
TClass result = new();
result.SetupFunctions(address);
return result;
}
}
#endregion
#region GetSteamUtils004
public SteamUtils005 GetSteamUtils004(int pipe)
{
return this.GetISteamUtils<SteamUtils005>(pipe, "SteamUtils005");
}
#endregion
#region GetISteamApps
private delegate IntPtr NativeGetISteamApps(int user, int pipe, IntPtr version);
private TClass GetISteamApps<TClass>(int user, int pipe, string version)
where TClass : INativeWrapper, new()
{
using (var nativeVersion = NativeStrings.StringToStringHandle(version))
{
IntPtr address = this.Call<IntPtr, NativeGetISteamApps>(
this.Functions.GetISteamApps,
user,
pipe,
nativeVersion.Handle);
TClass result = new();
result.SetupFunctions(address);
return result;
}
}
#endregion
#region GetSteamApps001
public SteamApps001 GetSteamApps001(int user, int pipe)
{
return this.GetISteamApps<SteamApps001>(user, pipe, "STEAMAPPS_INTERFACE_VERSION001");
}
#endregion
#region GetSteamApps008
public SteamApps008 GetSteamApps008(int user, int pipe)
{
return this.GetISteamApps<SteamApps008>(user, pipe, "STEAMAPPS_INTERFACE_VERSION008");
}
#endregion
}
}
================================================
FILE: SAM.API/Wrappers/SteamUser012.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
using SAM.API.Interfaces;
namespace SAM.API.Wrappers
{
public class SteamUser012 : NativeWrapper<ISteamUser012>
{
#region IsLoggedIn
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeLoggedOn(IntPtr self);
public bool IsLoggedIn()
{
return this.Call<bool, NativeLoggedOn>(this.Functions.LoggedOn, this.ObjectAddress);
}
#endregion
#region GetSteamID
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate void NativeGetSteamId(IntPtr self, out ulong steamId);
public ulong GetSteamId()
{
var call = this.GetFunction<NativeGetSteamId>(this.Functions.GetSteamID);
ulong steamId;
call(this.ObjectAddress, out steamId);
return steamId;
}
#endregion
}
}
================================================
FILE: SAM.API/Wrappers/SteamUserStats013.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
using SAM.API.Interfaces;
namespace SAM.API.Wrappers
{
public class SteamUserStats013 : NativeWrapper<ISteamUserStats013>
{
#region GetStatValue (int)
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeGetStatInt(IntPtr self, IntPtr name, out int data);
public bool GetStatValue(string name, out int value)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
var call = this.GetFunction<NativeGetStatInt>(this.Functions.GetStatInteger);
return call(this.ObjectAddress, nativeName.Handle, out value);
}
}
#endregion
#region GetStatValue (float)
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeGetStatFloat(IntPtr self, IntPtr name, out float data);
public bool GetStatValue(string name, out float value)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
var call = this.GetFunction<NativeGetStatFloat>(this.Functions.GetStatFloat);
return call(this.ObjectAddress, nativeName.Handle, out value);
}
}
#endregion
#region SetStatValue (int)
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeSetStatInt(IntPtr self, IntPtr name, int data);
public bool SetStatValue(string name, int value)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
return this.Call<bool, NativeSetStatInt>(
this.Functions.SetStatInteger,
this.ObjectAddress,
nativeName.Handle,
value);
}
}
#endregion
#region SetStatValue (float)
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeSetStatFloat(IntPtr self, IntPtr name, float data);
public bool SetStatValue(string name, float value)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
return this.Call<bool, NativeSetStatFloat>(
this.Functions.SetStatFloat,
this.ObjectAddress,
nativeName.Handle,
value);
}
}
#endregion
#region GetAchievement
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeGetAchievement(
IntPtr self,
IntPtr name,
[MarshalAs(UnmanagedType.I1)] out bool isAchieved);
public bool GetAchievement(string name, out bool isAchieved)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
var call = this.GetFunction<NativeGetAchievement>(this.Functions.GetAchievement);
return call(this.ObjectAddress, nativeName.Handle, out isAchieved);
}
}
#endregion
#region SetAchievement
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeSetAchievement(IntPtr self, IntPtr name);
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeClearAchievement(IntPtr self, IntPtr name);
public bool SetAchievement(string name, bool state)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
if (state == false)
{
return this.Call<bool, NativeClearAchievement>(
this.Functions.ClearAchievement,
this.ObjectAddress,
nativeName.Handle);
}
return this.Call<bool, NativeSetAchievement>(
this.Functions.SetAchievement,
this.ObjectAddress,
nativeName.Handle);
}
}
#endregion
#region GetAchievementAndUnlockTime
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeGetAchievementAndUnlockTime(
IntPtr self,
IntPtr name,
[MarshalAs(UnmanagedType.I1)] out bool isAchieved,
out uint unlockTime);
public bool GetAchievementAndUnlockTime(string name, out bool isAchieved, out uint unlockTime)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
var call = this.GetFunction<NativeGetAchievementAndUnlockTime>(this.Functions.GetAchievementAndUnlockTime);
return call(this.ObjectAddress, nativeName.Handle, out isAchieved, out unlockTime);
}
}
#endregion
#region StoreStats
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeStoreStats(IntPtr self);
public bool StoreStats()
{
return this.Call<bool, NativeStoreStats>(this.Functions.StoreStats, this.ObjectAddress);
}
#endregion
#region GetAchievementIcon
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate int NativeGetAchievementIcon(IntPtr self, IntPtr name);
public int GetAchievementIcon(string name)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
{
return this.Call<int, NativeGetAchievementIcon>(
this.Functions.GetAchievementIcon,
this.ObjectAddress,
nativeName.Handle);
}
}
#endregion
#region GetAchievementDisplayAttribute
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate IntPtr NativeGetAchievementDisplayAttribute(IntPtr self, IntPtr name, IntPtr key);
public string GetAchievementDisplayAttribute(string name, string key)
{
using (var nativeName = NativeStrings.StringToStringHandle(name))
using (var nativeKey = NativeStrings.StringToStringHandle(key))
{
var result = this.Call<IntPtr, NativeGetAchievementDisplayAttribute>(
this.Functions.GetAchievementDisplayAttribute,
this.ObjectAddress,
nativeName.Handle,
nativeKey.Handle);
return NativeStrings.PointerToString(result);
}
}
#endregion
#region RequestUserStats
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate CallHandle NativeRequestUserStats(IntPtr self, ulong steamIdUser);
public CallHandle RequestUserStats(ulong steamIdUser)
{
return this.Call<CallHandle, NativeRequestUserStats>(this.Functions.RequestUserStats, this.ObjectAddress, steamIdUser);
}
#endregion
#region ResetAllStats
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeResetAllStats(IntPtr self, [MarshalAs(UnmanagedType.I1)] bool achievementsToo);
public bool ResetAllStats(bool achievementsToo)
{
return this.Call<bool, NativeResetAllStats>(
this.Functions.ResetAllStats,
this.ObjectAddress,
achievementsToo);
}
#endregion
}
}
================================================
FILE: SAM.API/Wrappers/SteamUtils005.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Runtime.InteropServices;
using SAM.API.Interfaces;
namespace SAM.API.Wrappers
{
public class SteamUtils005 : NativeWrapper<ISteamUtils005>
{
#region GetConnectedUniverse
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate int NativeGetConnectedUniverse(IntPtr self);
public int GetConnectedUniverse()
{
return this.Call<int, NativeGetConnectedUniverse>(this.Functions.GetConnectedUniverse, this.ObjectAddress);
}
#endregion
#region GetIPCountry
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate IntPtr NativeGetIPCountry(IntPtr self);
public string GetIPCountry()
{
var result = this.Call<IntPtr, NativeGetIPCountry>(this.Functions.GetIPCountry, this.ObjectAddress);
return NativeStrings.PointerToString(result);
}
#endregion
#region GetImageSize
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeGetImageSize(IntPtr self, int index, out int width, out int height);
public bool GetImageSize(int index, out int width, out int height)
{
var call = this.GetFunction<NativeGetImageSize>(this.Functions.GetImageSize);
return call(this.ObjectAddress, index, out width, out height);
}
#endregion
#region GetImageRGBA
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
[return: MarshalAs(UnmanagedType.I1)]
private delegate bool NativeGetImageRGBA(IntPtr self, int index, byte[] buffer, int length);
public bool GetImageRGBA(int index, byte[] data)
{
if (data == null)
{
throw new ArgumentNullException("data");
}
var call = this.GetFunction<NativeGetImageRGBA>(this.Functions.GetImageRGBA);
return call(this.ObjectAddress, index, data, data.Length);
}
#endregion
#region GetAppID
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate uint NativeGetAppId(IntPtr self);
public uint GetAppId()
{
return this.Call<uint, NativeGetAppId>(this.Functions.GetAppID, this.ObjectAddress);
}
#endregion
}
}
================================================
FILE: SAM.Game/DoubleBufferedListView.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System.Windows.Forms;
namespace SAM.Game
{
internal class DoubleBufferedListView : ListView
{
public DoubleBufferedListView()
{
base.DoubleBuffered = true;
}
}
}
================================================
FILE: SAM.Game/GlobalSuppressions.cs
================================================
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "SAM.Game.KeyValue.#LoadAsBinary(System.String)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "SAM.Game.KeyValue.#ReadAsBinary(System.IO.Stream)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "SAM.Game.Manager.#LoadUserGameStatsSchema()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "SAM.Game.Manager.#OnIconDownload(System.Object,System.Net.DownloadDataCompletedEventArgs)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "member", Target = "SAM.Game.Manager.#OnUserStatsReceived(SAM.API.Types.UserStatsReceived)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic", Scope = "type", Target = "SAM.Game.Stats.StatIsProtectedException")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.ColumnHeader.set_Text(System.String)", Scope = "member", Target = "SAM.Game.Manager.#InitializeComponent()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.Control.set_Text(System.String)", Scope = "member", Target = "SAM.Game.Manager.#InitializeComponent()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.Form.set_Text(System.String)", Scope = "member", Target = "SAM.Game.Manager.#.ctor(System.Int64,SAM.API.Client)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#OnResetAllStats(System.Object,System.EventArgs)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#OnUserStatsReceived(SAM.API.Types.UserStatsReceived)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Program.#Main(System.String[])")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.Windows.Forms.IWin32Window,System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#OnCheckAchievement(System.Object,System.Windows.Forms.ItemCheckEventArgs)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.Windows.Forms.IWin32Window,System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#OnResetAllStats(System.Object,System.EventArgs)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.Windows.Forms.IWin32Window,System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#OnStore(System.Object,System.EventArgs)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.Windows.Forms.IWin32Window,System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#RefreshStats()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.Windows.Forms.IWin32Window,System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#Store()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.Windows.Forms.IWin32Window,System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#StoreAchievements()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.MessageBox.Show(System.Windows.Forms.IWin32Window,System.String,System.String,System.Windows.Forms.MessageBoxButtons,System.Windows.Forms.MessageBoxIcon)", Scope = "member", Target = "SAM.Game.Manager.#StoreStatistics()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.ToolStripItem.set_Text(System.String)", Scope = "member", Target = "SAM.Game.Manager.#DownloadNextIcon()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.ToolStripItem.set_Text(System.String)", Scope = "member", Target = "SAM.Game.Manager.#InitializeComponent()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.ToolStripItem.set_Text(System.String)", Scope = "member", Target = "SAM.Game.Manager.#OnUserStatsReceived(SAM.API.Types.UserStatsReceived)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.ToolStripItem.set_Text(System.String)", Scope = "member", Target = "SAM.Game.Manager.#RefreshStats()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:Do not pass literals as localized parameters", MessageId = "System.Windows.Forms.ToolStripItem.set_ToolTipText(System.String)", Scope = "member", Target = "SAM.Game.Manager.#InitializeComponent()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison", MessageId = "System.String.StartsWith(System.String,System.StringComparison)", Scope = "member", Target = "SAM.Game.Manager.#GetAchievements()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA2204:Literals should be spelled correctly", MessageId = "wstring", Scope = "member", Target = "SAM.Game.KeyValue.#ReadAsBinary(System.IO.Stream)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Scope = "member", Target = "SAM.Game.Manager.#GetStatistics()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Scope = "member", Target = "SAM.Game.Manager.#StoreStatistics()")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.Game.Stats.AchievementInfo.#ImageIndex")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.Game.Stats.StatInfo.#DisplayName")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.Game.Stats.StatInfo.#Extra")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.Game.Stats.StatInfo.#IsIncrementOnly")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.Game.Stats.StatIsProtectedException.#.ctor(System.String)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.Game.Stats.StatIsProtectedException.#.ctor(System.String,System.Exception)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "SAM.Game.StreamHelpers.#ReadStringAscii(System.IO.Stream)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.AchievementDefinition.#IsHidden")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.FloatStatDefinition.#DefaultValue")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.FloatStatDefinition.#MaxChange")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.FloatStatDefinition.#MaxValue")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.FloatStatDefinition.#MinValue")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.IntegerStatDefinition.#DefaultValue")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.IntegerStatDefinition.#MaxChange")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.IntegerStatDefinition.#MaxValue")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields", Scope = "member", Target = "SAM.Game.Stats.IntegerStatDefinition.#MinValue")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Scope = "member", Target = "SAM.Game.Manager.#.ctor(System.Int64,SAM.API.Client)")]
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope", Scope = "member", Target = "SAM.Game.Manager.#InitializeComponent()")]
================================================
FILE: SAM.Game/InvariantShorthand.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
namespace SAM.Game
{
public static class InvariantShorthand
{
public static string _(FormattableString formattable)
{
return FormattableString.Invariant(formattable);
}
}
}
================================================
FILE: SAM.Game/KeyValue.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace SAM.Game
{
internal class KeyValue
{
private static readonly KeyValue _Invalid = new();
public string Name = "<root>";
public KeyValueType Type = KeyValueType.None;
public object Value;
public bool Valid;
public List<KeyValue> Children = null;
public KeyValue this[string key]
{
get
{
if (this.Children == null)
{
return _Invalid;
}
var child = this.Children.SingleOrDefault(
c => string.Compare(c.Name, key, StringComparison.InvariantCultureIgnoreCase) == 0);
if (child == null)
{
return _Invalid;
}
return child;
}
}
public string AsString(string defaultValue)
{
if (this.Valid == false)
{
return defaultValue;
}
if (this.Value == null)
{
return defaultValue;
}
return this.Value.ToString();
}
public int AsInteger(int defaultValue)
{
if (this.Valid == false)
{
return defaultValue;
}
switch (this.Type)
{
case KeyValueType.String:
case KeyValueType.WideString:
{
return int.TryParse((string)this.Value, out int value) == false
? defaultValue
: value;
}
case KeyValueType.Int32:
{
return (int)this.Value;
}
case KeyValueType.Float32:
{
return (int)((float)this.Value);
}
case KeyValueType.UInt64:
{
return (int)((ulong)this.Value & 0xFFFFFFFF);
}
}
return defaultValue;
}
public float AsFloat(float defaultValue)
{
if (this.Valid == false)
{
return defaultValue;
}
switch (this.Type)
{
case KeyValueType.String:
case KeyValueType.WideString:
{
return float.TryParse((string)this.Value, out float value) == false
? defaultValue
: value;
}
case KeyValueType.Int32:
{
return (int)this.Value;
}
case KeyValueType.Float32:
{
return (float)this.Value;
}
case KeyValueType.UInt64:
{
return (ulong)this.Value & 0xFFFFFFFF;
}
}
return defaultValue;
}
public bool AsBoolean(bool defaultValue)
{
if (this.Valid == false)
{
return defaultValue;
}
switch (this.Type)
{
case KeyValueType.String:
case KeyValueType.WideString:
{
return int.TryParse((string)this.Value, out int value) == false
? defaultValue
: value != 0;
}
case KeyValueType.Int32:
{
return ((int)this.Value) != 0;
}
case KeyValueType.Float32:
{
return ((int)((float)this.Value)) != 0;
}
case KeyValueType.UInt64:
{
return ((ulong)this.Value) != 0;
}
}
return defaultValue;
}
public override string ToString()
{
if (this.Valid == false)
{
return "<invalid>";
}
if (this.Type == KeyValueType.None)
{
return this.Name;
}
return $"{this.Name} = {this.Value}";
}
public static KeyValue LoadAsBinary(string path)
{
if (File.Exists(path) == false)
{
return null;
}
try
{
using (var input = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
KeyValue kv = new();
if (kv.ReadAsBinary(input) == false)
{
return null;
}
return kv;
}
}
catch (Exception)
{
return null;
}
}
public bool ReadAsBinary(Stream input)
{
this.Children = new();
try
{
while (true)
{
var type = (KeyValueType)input.ReadValueU8();
if (type == KeyValueType.End)
{
break;
}
KeyValue current = new()
{
Type = type,
Name = input.ReadStringUnicode(),
};
switch (type)
{
case KeyValueType.None:
{
current.ReadAsBinary(input);
break;
}
case KeyValueType.String:
{
current.Valid = true;
current.Value = input.ReadStringUnicode();
break;
}
case KeyValueType.WideString:
{
throw new FormatException("wstring is unsupported");
}
case KeyValueType.Int32:
{
current.Valid = true;
current.Value = input.ReadValueS32();
break;
}
case KeyValueType.UInt64:
{
current.Valid = true;
current.Value = input.ReadValueU64();
break;
}
case KeyValueType.Float32:
{
current.Valid = true;
current.Value = input.ReadValueF32();
break;
}
case KeyValueType.Color:
{
current.Valid = true;
current.Value = input.ReadValueU32();
break;
}
case KeyValueType.Pointer:
{
current.Valid = true;
current.Value = input.ReadValueU32();
break;
}
default:
{
throw new FormatException();
}
}
if (input.Position >= input.Length)
{
throw new FormatException();
}
this.Children.Add(current);
}
this.Valid = true;
return input.Position == input.Length;
}
catch (Exception)
{
return false;
}
}
}
}
================================================
FILE: SAM.Game/KeyValueType.cs
================================================
/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*/
namespace SAM.Game
{
internal enum KeyValueType : byte
{
None = 0,
String = 1,
Int32 = 2,
Float32 = 3,
Pointer = 4,
WideString = 5,
Color = 6,
UInt64 = 7,
End = 8,
}
}
================================================
FILE: SAM.Game/LICENSE.txt
================================================
zlib License
Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would
be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
================================================
FILE: SAM.Game/Manager.Designer.cs
================================================
namespace SAM.Game
{
partial class Manager
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.ToolStripSeparator _ToolStripSeparator1;
System.Windows.Forms.ToolStripSeparator _ToolStripSeparator2;
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Manager));
this._MainToolStrip = new System.Windows.Forms.ToolStrip();
this._StoreButton = new System.Windows.Forms.ToolStripButton();
this._ReloadButton = new System.Windows.Forms.ToolStripButton();
this._ResetButton = new System.Windows.Forms.ToolStripButton();
this._AchievementImageList = new System.Windows.Forms.ImageList(this.components);
this._MainStatusStrip = new System.Windows.Forms.StatusStrip();
this._CountryStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this._GameStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this._DownloadStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this._CallbackTimer = new System.Windows.Forms.Timer(this.components);
this._MainTabControl = new System.Windows.Forms.TabControl();
this._AchievementsTabPage = new System.Windows.Forms.TabPage();
this._AchievementListView = new SAM.Game.DoubleBufferedListView();
this._AchievementNameColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this._AchievementDescriptionColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this._AchievementUnlockTimeColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this._AchievementsToolStrip = new System.Windows.Forms.ToolStrip();
this._LockAllButton = new System.Windows.Forms.ToolStripButton();
this._InvertAllButton = new System.Windows.Forms.ToolStripButton();
this._UnlockAllButton = new System.Windows.Forms.ToolStripButton();
this._DisplayLabel = new System.Windows.Forms.ToolStripLabel();
this._DisplayLockedOnlyButton = new System.Windows.Forms.ToolStripButton();
this._DisplayUnlockedOnlyButton = new System.Windows.Forms.ToolStripButton();
this._MatchingStringLabel = new System.Windows.Forms.ToolStripLabel();
this._MatchingStringTextBox = new System.Windows.Forms.ToolStripTextBox();
this._StatisticsTabPage = new System.Windows.Forms.TabPage();
this._EnableStatsEditingCheckBox = new System.Windows.Forms.CheckBox();
this._StatisticsDataGridView = new System.Windows.Forms.DataGridView();
_ToolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
_ToolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this._MainToolStrip.SuspendLayout();
this._MainStatusStrip.SuspendLayout();
this._MainTabControl.SuspendLayout();
this._AchievementsTabPage.SuspendLayout();
this._AchievementsToolStrip.SuspendLayout();
this._StatisticsTabPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this._StatisticsDataGridView)).BeginInit();
this.SuspendLayout();
//
// _ToolStripSeparator1
//
_ToolStripSeparator1.Name = "_ToolStripSeparator1";
_ToolStripSeparator1.Size = new System.Drawing.Size(6, 25);
//
// _ToolStripSeparator2
//
_ToolStripSeparator2.Name = "_ToolStripSeparator2";
_ToolStripSeparator2.Size = new System.Drawing.Size(6, 25);
//
// _MainToolStrip
//
this._MainToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this._StoreButton,
this._ReloadButton,
this._ResetButton});
this._MainToolStrip.Location = new System.Drawing.Point(0, 0);
this._MainToolStrip.Name = "_MainToolStrip";
this._MainToolStrip.Size = new System.Drawing.Size(712, 25);
this._MainToolStrip.TabIndex = 1;
//
// _StoreButton
//
this._StoreButton.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this._StoreButton.Enabled = false;
this._StoreButton.Image = global::SAM.Game.Resources.Save;
this._StoreButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this._StoreButton.Name = "_StoreButton";
this._StoreButton.Size = new System.Drawing.Size(120, 22);
this._StoreButton.Text = "Commit Changes";
this._StoreButton.ToolTipText = "Store achievements and statistics for active game.";
this._StoreButton.Click += new System.EventHandler(this.OnStore);
//
// _ReloadButton
//
this._ReloadButton.Enabled = false;
this._ReloadButton.Image = global::SAM.Game.Resources.Refresh;
this._ReloadButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this._ReloadButton.Name = "_ReloadButton";
this._ReloadButton.Size = new System.Drawing.Size(66, 22);
this._ReloadButton.Text = "Refresh";
this._ReloadButton.ToolTipText = "Refresh achievements and statistics for active game.";
this._ReloadButton.Click += new System.EventHandler(this.OnRefresh);
//
// _ResetButton
//
this._ResetButton.Image = global::SAM.Game.Resources.Reset;
this._ResetButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this._ResetButton.Name = "_ResetButton";
this._ResetButton.Size = new System.Drawing.Size(55, 22);
this._ResetButton.Text = "Reset";
this._ResetButton.ToolTipText = "Reset achievements and/or statistics for active game.";
this._ResetButton.Click += new System.EventHandler(this.OnResetAllStats);
//
// _AchievementImageList
//
this._AchievementImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth24Bit;
this._AchievementImageList.ImageSize = new System.Drawing.Size(64, 64);
this._AchievementImageList.TransparentColor = System.Drawing.Color.Transparent;
//
// _MainStatusStrip
//
this._MainStatusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this._CountryStatusLabel,
this._GameStatusLabel,
this._DownloadStatusLabel});
this._MainStatusStrip.Location = new System.Drawing.Point(0, 370);
this._MainStatusStrip.Name = "_MainStatusStrip";
this._MainStatusStrip.Size = new System.Drawing.Size(712, 22);
this._MainStatusStrip.TabIndex = 4;
//
// _CountryStatusLabel
//
this._CountryStatusLabel.Name = "_CountryStatusLabel";
this._CountryStatusLabel.Size = new System.Drawing.Size(0, 17);
//
// _GameStatusLabel
//
this._GameStatusLabel.Name = "_GameStatusLabel";
this._GameStatusLabel.Size = new System.Drawing.Size(555, 17);
this._GameStatusLabel.Spring = true;
this._GameStatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// _DownloadStatusLabel
//
this._DownloadStatusLabel.Image = global::SAM.Game.Resources.Download;
this._DownloadStatusLabel.Name = "_DownloadStatusLabel";
this._DownloadStatusLabel.Size = new System.Drawing.Size(111, 17);
this._DownloadStatusLabel.Text = "Download status";
this._DownloadStatusLabel.Visible = false;
//
// _CallbackTimer
//
this._CallbackTimer.Enabled = true;
this._CallbackTimer.Tick += new System.EventHandler(this.OnTimer);
//
// _MainTabControl
//
this._MainTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this._MainTabControl.Controls.Add(this._AchievementsTabPage);
this._MainTabControl.Controls.Add(this._StatisticsTabPage);
this._MainTabControl.Location = new System.Drawing.Point(8, 33);
this._MainTabControl.Name = "_MainTabControl";
this._MainTabControl.SelectedIndex = 0;
this._MainTabControl.Size = new System.Drawing.Size(696, 334);
this._MainTabControl.TabIndex = 5;
//
// _AchievementsTabPage
//
this._AchievementsTabPage.Controls.Add(this._AchievementListView);
this._AchievementsTabPage.Controls.Add(this._AchievementsToolStrip);
this._AchievementsTabPage.Location = new System.Drawing.Point(4, 22);
this._AchievementsTabPage.Name = "_AchievementsTabPage";
this._AchievementsTabPage.Padding = new System.Windows.Forms.Padding(3);
this._AchievementsTabPage.Size = new System.Drawing.Size(688, 308);
this._AchievementsTabPage.TabIndex = 0;
this._AchievementsTabPage.Text = "Achievements";
this._AchievementsTabPage.UseVisualStyleBackColor = true;
//
// _AchievementListView
//
this._AchievementListView.Activation = System.Windows.Forms.ItemActivation.OneClick;
this._AchievementListView.BackColor = System.Drawing.Color.Black;
this._AchievementListView.BackgroundImageTiled = true;
this._AchievementListView.CheckBoxes = true;
this._AchievementListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this._AchievementNameColumnHeader,
this._AchievementDescriptionColumnHeader,
this._AchievementUnlockTimeColumnHeader});
this._AchievementListView.Dock = System.Windows.Forms.DockStyle.Fill;
this._AchievementListView.ForeColor = System.Drawing.Color.White;
this._AchievementListView.FullRowSelect = true;
this._AchievementListView.GridLines = true;
this._AchievementListView.HideSelection = false;
this._AchievementListView.LargeImageList = this._AchievementImageList;
this._AchievementListView.Location = new System.Drawing.Point(3, 28);
this._AchievementListView.Name = "_AchievementListView";
this._AchievementListView.Size = new System.Drawing.Size(682, 277);
this._AchievementListView.SmallImageList = this._AchievementImageList;
this._AchievementListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
this._AchievementListView.TabIndex = 4;
this._AchievementListView.UseCompatibleStateImageBehavior = false;
this._AchievementListView.View = System.Windows.Forms.View.Details;
this._AchievementListView.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.OnCheckAchievement);
//
// _AchievementNameColumnHeader
//
this._AchievementNameColumnHeader.Text = "Name";
this._AchievementNameColumnHeader.Width = 200;
//
// _AchievementDescriptionColumnHeader
//
this._AchievementDescriptionColumnHeader.Text = "Description";
this._AchievementDescriptionColumnHeader.Width = 300;
//
// _AchievementUnlockTimeColumnHeader
//
this._AchievementUnlockTimeColumnHeader.Text = "Unlock Time";
this._AchievementUnlockTimeColumnHeader.Width = 160;
//
// _AchievementsToolStrip
//
this._AchievementsToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this._LockAllButton,
this._InvertAllButton,
this._UnlockAllButton,
_ToolStripSeparator1,
this._DisplayLabel,
this._DisplayLockedOnlyButton,
this._DisplayUnlockedOnlyButton,
_ToolStripSeparator2,
this._MatchingStringLabel,
this._MatchingStringTextBox});
this._AchievementsToolStrip.Location = new System.Drawing.Point(3, 3);
this._AchievementsToolStrip.Name = "_AchievementsToolStrip";
this._AchievementsToolStrip.Size = new System.Drawing.Size(682, 25);
this._AchievementsToolStrip.TabIndex = 5;
//
// _LockAllButton
//
this._LockAllButton.DisplayStyle = System.Windows.For
gitextract_ytgc_t4t/ ├── .appveyor.yml ├── .gitattributes ├── .gitignore ├── LICENSE.txt ├── README.md ├── SAM.API/ │ ├── CallHandle.cs │ ├── Callback.cs │ ├── Callbacks/ │ │ ├── AppDataChanged.cs │ │ └── UserStatsReceived.cs │ ├── Client.cs │ ├── ClientInitializeException.cs │ ├── ClientInitializeFailure.cs │ ├── GlobalSuppressions.cs │ ├── ICallback.cs │ ├── INativeWrapper.cs │ ├── Interfaces/ │ │ ├── ISteamApps001.cs │ │ ├── ISteamApps008.cs │ │ ├── ISteamClient018.cs │ │ ├── ISteamUser012.cs │ │ ├── ISteamUserStats013.cs │ │ └── ISteamUtils005.cs │ ├── LICENSE.txt │ ├── NativeClass.cs │ ├── NativeStrings.cs │ ├── NativeWrapper.cs │ ├── SAM.API.csproj │ ├── SAM.API.csproj.DotSettings │ ├── Steam.cs │ ├── Types/ │ │ ├── AccountType.cs │ │ ├── AppDataChanged.cs │ │ ├── CallbackMessage.cs │ │ ├── ItemRequestResult.cs │ │ ├── UserItemsReceived.cs │ │ ├── UserStatType.cs │ │ ├── UserStatsReceived.cs │ │ └── UserStatsStored.cs │ └── Wrappers/ │ ├── SteamApps001.cs │ ├── SteamApps008.cs │ ├── SteamClient018.cs │ ├── SteamUser012.cs │ ├── SteamUserStats013.cs │ └── SteamUtils005.cs ├── SAM.Game/ │ ├── DoubleBufferedListView.cs │ ├── GlobalSuppressions.cs │ ├── InvariantShorthand.cs │ ├── KeyValue.cs │ ├── KeyValueType.cs │ ├── LICENSE.txt │ ├── Manager.Designer.cs │ ├── Manager.cs │ ├── Manager.resx │ ├── Program.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── SAM.Game.csproj │ ├── SAM.Game.csproj.DotSettings │ ├── Stats/ │ │ ├── AchievementDefinition.cs │ │ ├── AchievementInfo.cs │ │ ├── FloatStatDefinition.cs │ │ ├── FloatStatInfo.cs │ │ ├── IntStatInfo.cs │ │ ├── IntegerStatDefinition.cs │ │ ├── StatDefinition.cs │ │ ├── StatFlags.cs │ │ ├── StatInfo.cs │ │ └── StatIsProtectedException.cs │ ├── StreamHelpers.cs │ ├── app.config │ └── app.manifest ├── SAM.Picker/ │ ├── GameInfo.cs │ ├── GamePicker.Designer.cs │ ├── GamePicker.cs │ ├── GamePicker.resx │ ├── GlobalSuppressions.cs │ ├── InvariantShorthand.cs │ ├── LICENSE.txt │ ├── LogoInfo.cs │ ├── MyListView.cs │ ├── Program.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── SAM.Picker.csproj │ └── app.manifest └── SAM.sln
SYMBOL INDEX (229 symbols across 60 files)
FILE: SAM.API/CallHandle.cs
type CallHandle (line 25) | public enum CallHandle : ulong
FILE: SAM.API/Callback.cs
class Callback (line 28) | public abstract class Callback : ICallback
method Run (line 37) | public void Run(IntPtr param)
method Run (line 53) | public void Run(IntPtr pvParam)
class Callback (line 43) | public abstract class Callback<TParameter> : ICallback
method Run (line 37) | public void Run(IntPtr param)
method Run (line 53) | public void Run(IntPtr pvParam)
FILE: SAM.API/Callbacks/AppDataChanged.cs
class AppDataChanged (line 25) | public class AppDataChanged : Callback<Types.AppDataChanged>
FILE: SAM.API/Callbacks/UserStatsReceived.cs
class UserStatsReceived (line 25) | public class UserStatsReceived : Callback<Types.UserStatsReceived>
FILE: SAM.API/Client.cs
class Client (line 30) | public class Client : IDisposable
method Initialize (line 45) | public void Initialize(long appId)
method Dispose (line 97) | protected virtual void Dispose(bool disposing)
method Dispose (line 119) | public void Dispose()
method CreateAndRegisterCallback (line 125) | public TCallback CreateAndRegisterCallback<TCallback>()
method RunCallbacks (line 135) | public void RunCallbacks(bool server)
FILE: SAM.API/ClientInitializeException.cs
class ClientInitializeException (line 26) | public class ClientInitializeException : Exception
method ClientInitializeException (line 30) | public ClientInitializeException(ClientInitializeFailure failure)
method ClientInitializeException (line 35) | public ClientInitializeException(ClientInitializeFailure failure, stri...
method ClientInitializeException (line 41) | public ClientInitializeException(ClientInitializeFailure failure, stri...
FILE: SAM.API/ClientInitializeFailure.cs
type ClientInitializeFailure (line 24) | public enum ClientInitializeFailure : byte
FILE: SAM.API/ICallback.cs
type ICallback (line 27) | public interface ICallback
method Run (line 31) | void Run(IntPtr param);
FILE: SAM.API/INativeWrapper.cs
type INativeWrapper (line 27) | public interface INativeWrapper
method SetupFunctions (line 29) | void SetupFunctions(IntPtr objectAddress);
FILE: SAM.API/Interfaces/ISteamApps001.cs
type ISteamApps001 (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Interfaces/ISteamApps008.cs
type ISteamApps008 (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Interfaces/ISteamClient018.cs
type ISteamClient018 (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Interfaces/ISteamUser012.cs
type ISteamUser012 (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Interfaces/ISteamUserStats013.cs
class ISteamUserStats013 (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Interfaces/ISteamUtils005.cs
type ISteamUtils005 (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/NativeClass.cs
type NativeClass (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
FILE: SAM.API/NativeStrings.cs
class NativeStrings (line 30) | internal class NativeStrings
class StringHandle (line 32) | public sealed class StringHandle : SafeHandleZeroOrMinusOneIsInvalid
method StringHandle (line 34) | internal StringHandle(IntPtr preexistingHandle, bool ownsHandle)
method ReleaseHandle (line 45) | protected override bool ReleaseHandle()
method StringToStringHandle (line 58) | public static unsafe StringHandle StringToStringHandle(string value)
method PointerToString (line 74) | public static unsafe string PointerToString(sbyte* bytes)
method PointerToString (line 97) | public static unsafe string PointerToString(byte* bytes)
method PointerToString (line 102) | public static unsafe string PointerToString(IntPtr nativeData)
method PointerToString (line 107) | public static unsafe string PointerToString(sbyte* bytes, int length)
method PointerToString (line 131) | public static unsafe string PointerToString(byte* bytes, int length)
method PointerToString (line 136) | public static unsafe string PointerToString(IntPtr nativeData, int len...
FILE: SAM.API/NativeWrapper.cs
class NativeWrapper (line 29) | public abstract class NativeWrapper<TNativeFunctions> : INativeWrapper
method ToString (line 34) | public override string ToString()
method SetupFunctions (line 39) | public void SetupFunctions(IntPtr objectAddress)
method GetDelegate (line 54) | protected Delegate GetDelegate<TDelegate>(IntPtr pointer)
method GetFunction (line 64) | protected TDelegate GetFunction<TDelegate>(IntPtr pointer)
method Call (line 70) | protected void Call<TDelegate>(IntPtr pointer, params object[] args)
method Call (line 75) | protected TReturn Call<TReturn, TDelegate>(IntPtr pointer, params obje...
FILE: SAM.API/Steam.cs
class Steam (line 30) | public static class Steam
type Native (line 32) | private struct Native
method GetProcAddress (line 34) | [DllImport("kernel32.dll", SetLastError = true, BestFitMapping = fal...
method LoadLibraryEx (line 37) | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Un...
method SetDllDirectory (line 40) | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Un...
method GetExportDelegate (line 47) | private static Delegate GetExportDelegate<TDelegate>(IntPtr module, st...
method GetExportFunction (line 53) | private static TDelegate GetExportFunction<TDelegate>(IntPtr module, s...
method GetInstallPath (line 61) | public static string GetInstallPath()
method CreateInterface (line 71) | public static TClass CreateInterface<TClass>(string version)
method GetCallback (line 92) | public static bool GetCallback(int pipe, out Types.CallbackMessage mes...
method FreeLastCallback (line 103) | public static bool FreeLastCallback(int pipe)
method Load (line 108) | public static bool Load()
FILE: SAM.API/Types/AccountType.cs
type AccountType (line 25) | public enum AccountType : int
FILE: SAM.API/Types/AppDataChanged.cs
type AppDataChanged (line 27) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Types/CallbackMessage.cs
type CallbackMessage (line 28) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Types/ItemRequestResult.cs
type ItemRequestResult (line 25) | public enum ItemRequestResult : int
FILE: SAM.API/Types/UserItemsReceived.cs
type UserItemsReceived (line 27) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Types/UserStatType.cs
type UserStatType (line 25) | public enum UserStatType
FILE: SAM.API/Types/UserStatsReceived.cs
type UserStatsReceived (line 27) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Types/UserStatsStored.cs
type UserStatsStored (line 27) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
FILE: SAM.API/Wrappers/SteamApps001.cs
class SteamApps001 (line 29) | public class SteamApps001 : NativeWrapper<ISteamApps001>
method GetAppData (line 40) | public string GetAppData(uint appId, string key)
FILE: SAM.API/Wrappers/SteamApps008.cs
class SteamApps008 (line 29) | public class SteamApps008 : NativeWrapper<ISteamApps008>
method IsSubscribedApp (line 36) | public bool IsSubscribedApp(uint gameId)
method GetCurrentGameLanguage (line 46) | public string GetCurrentGameLanguage()
FILE: SAM.API/Wrappers/SteamClient018.cs
class SteamClient018 (line 29) | public class SteamClient018 : NativeWrapper<ISteamClient018>
method CreateSteamPipe (line 35) | public int CreateSteamPipe()
method ReleaseSteamPipe (line 46) | public bool ReleaseSteamPipe(int pipe)
method CreateLocalUser (line 56) | public int CreateLocalUser(ref int pipe, Types.AccountType type)
method ConnectToGlobalUser (line 67) | public int ConnectToGlobalUser(int pipe)
method ReleaseUser (line 80) | public void ReleaseUser(int pipe, int user)
method SetLocalIPBinding (line 90) | public void SetLocalIPBinding(uint host, ushort port)
method GetISteamUser (line 100) | private TClass GetISteamUser<TClass>(int user, int pipe, string version)
method GetSteamUser012 (line 119) | public SteamUser012 GetSteamUser012(int user, int pipe)
method GetISteamUserStats (line 129) | private TClass GetISteamUserStats<TClass>(int user, int pipe, string v...
method GetSteamUserStats013 (line 148) | public SteamUserStats013 GetSteamUserStats013(int user, int pipe)
method GetISteamUtils (line 158) | public TClass GetISteamUtils<TClass>(int pipe, string version)
method GetSteamUtils004 (line 176) | public SteamUtils005 GetSteamUtils004(int pipe)
method GetISteamApps (line 185) | private TClass GetISteamApps<TClass>(int user, int pipe, string version)
method GetSteamApps001 (line 203) | public SteamApps001 GetSteamApps001(int user, int pipe)
method GetSteamApps008 (line 210) | public SteamApps008 GetSteamApps008(int user, int pipe)
FILE: SAM.API/Wrappers/SteamUser012.cs
class SteamUser012 (line 29) | public class SteamUser012 : NativeWrapper<ISteamUser012>
method IsLoggedIn (line 36) | public bool IsLoggedIn()
method GetSteamId (line 46) | public ulong GetSteamId()
FILE: SAM.API/Wrappers/SteamUserStats013.cs
class SteamUserStats013 (line 29) | public class SteamUserStats013 : NativeWrapper<ISteamUserStats013>
method GetStatValue (line 36) | public bool GetStatValue(string name, out int value)
method GetStatValue (line 51) | public bool GetStatValue(string name, out float value)
method SetStatValue (line 66) | public bool SetStatValue(string name, int value)
method SetStatValue (line 84) | public bool SetStatValue(string name, float value)
method GetAchievement (line 105) | public bool GetAchievement(string name, out bool isAchieved)
method SetAchievement (line 124) | public bool SetAchievement(string name, bool state)
method GetAchievementAndUnlockTime (line 153) | public bool GetAchievementAndUnlockTime(string name, out bool isAchiev...
method StoreStats (line 168) | public bool StoreStats()
method GetAchievementIcon (line 178) | public int GetAchievementIcon(string name)
method GetAchievementDisplayAttribute (line 194) | public string GetAchievementDisplayAttribute(string name, string key)
method RequestUserStats (line 213) | public CallHandle RequestUserStats(ulong steamIdUser)
method ResetAllStats (line 224) | public bool ResetAllStats(bool achievementsToo)
FILE: SAM.API/Wrappers/SteamUtils005.cs
class SteamUtils005 (line 29) | public class SteamUtils005 : NativeWrapper<ISteamUtils005>
method GetConnectedUniverse (line 35) | public int GetConnectedUniverse()
method GetIPCountry (line 45) | public string GetIPCountry()
method GetImageSize (line 57) | public bool GetImageSize(int index, out int width, out int height)
method GetImageRGBA (line 69) | public bool GetImageRGBA(int index, byte[] data)
method GetAppId (line 84) | public uint GetAppId()
FILE: SAM.Game/DoubleBufferedListView.cs
class DoubleBufferedListView (line 27) | internal class DoubleBufferedListView : ListView
method DoubleBufferedListView (line 29) | public DoubleBufferedListView()
FILE: SAM.Game/InvariantShorthand.cs
class InvariantShorthand (line 27) | public static class InvariantShorthand
method _ (line 29) | public static string _(FormattableString formattable)
FILE: SAM.Game/KeyValue.cs
class KeyValue (line 30) | internal class KeyValue
method AsString (line 61) | public string AsString(string defaultValue)
method AsInteger (line 76) | public int AsInteger(int defaultValue)
method AsFloat (line 112) | public float AsFloat(float defaultValue)
method AsBoolean (line 148) | public bool AsBoolean(bool defaultValue)
method ToString (line 184) | public override string ToString()
method LoadAsBinary (line 199) | public static KeyValue LoadAsBinary(string path)
method ReadAsBinary (line 224) | public bool ReadAsBinary(Stream input)
FILE: SAM.Game/KeyValueType.cs
type KeyValueType (line 25) | internal enum KeyValueType : byte
FILE: SAM.Game/Manager.Designer.cs
class Manager (line 3) | partial class Manager
method Dispose (line 14) | protected override void Dispose(bool disposing)
method InitializeComponent (line 29) | private void InitializeComponent()
FILE: SAM.Game/Manager.cs
class Manager (line 37) | internal partial class Manager : Form
method Manager (line 55) | public Manager(long gameId, API.Client client)
method AddAchievementIcon (line 109) | private void AddAchievementIcon(Stats.AchievementInfo info, Image icon)
method OnIconDownload (line 122) | private void OnIconDownload(object sender, DownloadDataCompletedEventA...
method DownloadNextIcon (line 149) | private void DownloadNextIcon()
method TranslateError (line 174) | private static string TranslateError(int id) => id switch
method GetLocalizedString (line 180) | private static string GetLocalizedString(KeyValue kv, string language,...
method LoadUserGameStatsSchema (line 206) | private bool LoadUserGameStatsSchema()
method OnUserStatsReceived (line 367) | private void OnUserStatsReceived(APITypes.UserStatsReceived param)
method RefreshStats (line 419) | private void RefreshStats()
method GetAchievements (line 441) | private void GetAchievements()
method GetStatistics (line 540) | private void GetStatistics()
method AddAchievementToIconQueue (line 585) | private void AddAchievementToIconQueue(Stats.AchievementInfo info, boo...
method StoreAchievements (line 605) | private int StoreAchievements()
method StoreStatistics (line 647) | private int StoreStatistics()
method DisableInput (line 701) | private void DisableInput()
method EnableInput (line 707) | private void EnableInput()
method OnTimer (line 713) | private void OnTimer(object sender, EventArgs e)
method OnRefresh (line 720) | private void OnRefresh(object sender, EventArgs e)
method OnLockAll (line 725) | private void OnLockAll(object sender, EventArgs e)
method OnInvertAll (line 733) | private void OnInvertAll(object sender, EventArgs e)
method OnUnlockAll (line 741) | private void OnUnlockAll(object sender, EventArgs e)
method Store (line 749) | private bool Store()
method OnStore (line 765) | private void OnStore(object sender, EventArgs e)
method OnStatDataError (line 796) | private void OnStatDataError(object sender, DataGridViewDataErrorEvent...
method OnStatAgreementChecked (line 818) | private void OnStatAgreementChecked(object sender, EventArgs e)
method OnStatCellEndEdit (line 823) | private void OnStatCellEndEdit(object sender, DataGridViewCellEventArg...
method OnResetAllStats (line 829) | private void OnResetAllStats(object sender, EventArgs e)
method OnCheckAchievement (line 864) | private void OnCheckAchievement(object sender, ItemCheckEventArgs e)
method OnDisplayUncheckedOnly (line 893) | private void OnDisplayUncheckedOnly(object sender, EventArgs e)
method OnDisplayCheckedOnly (line 903) | private void OnDisplayCheckedOnly(object sender, EventArgs e)
method OnFilterUpdate (line 913) | private void OnFilterUpdate(object sender, KeyEventArgs e)
FILE: SAM.Game/Program.cs
class Program (line 29) | internal static class Program
method Main (line 31) | [STAThread]
FILE: SAM.Game/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: SAM.Game/Stats/AchievementDefinition.cs
class AchievementDefinition (line 25) | internal class AchievementDefinition
method ToString (line 35) | public override string ToString()
FILE: SAM.Game/Stats/AchievementInfo.cs
class AchievementInfo (line 28) | internal class AchievementInfo
FILE: SAM.Game/Stats/FloatStatDefinition.cs
class FloatStatDefinition (line 25) | internal class FloatStatDefinition : StatDefinition
FILE: SAM.Game/Stats/FloatStatInfo.cs
class FloatStatInfo (line 25) | internal class FloatStatInfo : StatInfo
FILE: SAM.Game/Stats/IntStatInfo.cs
class IntStatInfo (line 25) | internal class IntStatInfo : StatInfo
FILE: SAM.Game/Stats/IntegerStatDefinition.cs
class IntegerStatDefinition (line 25) | internal class IntegerStatDefinition : StatDefinition
FILE: SAM.Game/Stats/StatDefinition.cs
class StatDefinition (line 25) | internal abstract class StatDefinition
FILE: SAM.Game/Stats/StatFlags.cs
type StatFlags (line 27) | [Flags]
FILE: SAM.Game/Stats/StatInfo.cs
class StatInfo (line 25) | internal abstract class StatInfo
FILE: SAM.Game/Stats/StatIsProtectedException.cs
class StatIsProtectedException (line 28) | [Serializable]
method StatIsProtectedException (line 31) | public StatIsProtectedException()
method StatIsProtectedException (line 35) | public StatIsProtectedException(string message)
method StatIsProtectedException (line 40) | public StatIsProtectedException(string message, Exception innerException)
method StatIsProtectedException (line 45) | protected StatIsProtectedException(SerializationInfo info, StreamingCo...
FILE: SAM.Game/StreamHelpers.cs
class StreamHelpers (line 31) | internal static class StreamHelpers
method ReadValueU8 (line 33) | public static byte ReadValueU8(this Stream stream)
method ReadValueS32 (line 38) | public static int ReadValueS32(this Stream stream)
method ReadValueU32 (line 46) | public static uint ReadValueU32(this Stream stream)
method ReadValueU64 (line 54) | public static ulong ReadValueU64(this Stream stream)
method ReadValueF32 (line 62) | public static float ReadValueF32(this Stream stream)
method ReadStringInternalDynamic (line 70) | internal static string ReadStringInternalDynamic(this Stream stream, E...
method ReadStringAscii (line 105) | public static string ReadStringAscii(this Stream stream)
method ReadStringUnicode (line 110) | public static string ReadStringUnicode(this Stream stream)
FILE: SAM.Picker/GameInfo.cs
class GameInfo (line 28) | internal class GameInfo
method GameInfo (line 46) | public GameInfo(uint id, string type)
FILE: SAM.Picker/GamePicker.Designer.cs
class GamePicker (line 3) | partial class GamePicker
method Dispose (line 14) | protected override void Dispose(bool disposing)
method InitializeComponent (line 29) | private void InitializeComponent()
FILE: SAM.Picker/GamePicker.cs
class GamePicker (line 40) | internal partial class GamePicker : Form
method GamePicker (line 54) | public GamePicker(API.Client client)
method OnAppDataChanged (line 81) | private void OnAppDataChanged(APITypes.AppDataChanged param)
method DoDownloadList (line 99) | private void DoDownloadList(object sender, DoWorkEventArgs e)
method OnDownloadList (line 133) | private void OnDownloadList(object sender, RunWorkerCompletedEventArgs e)
method RefreshGames (line 146) | private void RefreshGames()
method OnGameListViewRetrieveVirtualItem (line 193) | private void OnGameListViewRetrieveVirtualItem(object sender, Retrieve...
method OnGameListViewSearchForVirtualItem (line 203) | private void OnGameListViewSearchForVirtualItem(object sender, SearchF...
method DoDownloadLogo (line 252) | private void DoDownloadLogo(object sender, DoWorkEventArgs e)
method OnDownloadLogo (line 276) | private void OnDownloadLogo(object sender, RunWorkerCompletedEventArgs e)
method DownloadNextLogo (line 297) | private void DownloadNextLogo()
method GetGameImageUrl (line 338) | private string GetGameImageUrl(uint id)
method AddGameToLogoQueue (line 368) | private void AddGameToLogoQueue(GameInfo info)
method OwnsGame (line 397) | private bool OwnsGame(uint id)
method AddGame (line 402) | private void AddGame(uint id, string type)
method AddGames (line 419) | private void AddGames()
method AddDefaultGames (line 426) | private void AddDefaultGames()
method OnTimer (line 431) | private void OnTimer(object sender, EventArgs e)
method OnActivateGame (line 438) | private void OnActivateGame(object sender, EventArgs e)
method OnRefresh (line 468) | private void OnRefresh(object sender, EventArgs e)
method OnAddGame (line 474) | private void OnAddGame(object sender, EventArgs e)
method OnFilterUpdate (line 509) | private void OnFilterUpdate(object sender, EventArgs e)
method OnGameListViewDrawItem (line 517) | private void OnGameListViewDrawItem(object sender, DrawListViewItemEve...
FILE: SAM.Picker/InvariantShorthand.cs
class InvariantShorthand (line 27) | internal static class InvariantShorthand
method _ (line 29) | public static string _(FormattableString formattable)
FILE: SAM.Picker/LogoInfo.cs
class LogoInfo (line 27) | internal class LogoInfo
method LogoInfo (line 32) | public LogoInfo(uint id, Bitmap bitmap)
FILE: SAM.Picker/MyListView.cs
class MyListView (line 29) | internal class MyListView : ListView
method MyListView (line 33) | public MyListView()
method OnScroll (line 38) | protected virtual void OnScroll(ScrollEventArgs e)
method WndProc (line 43) | protected override void WndProc(ref Message m)
method TranslateKeyScrollEvent (line 68) | private static bool TranslateKeyScrollEvent(Keys keys, out ScrollEvent...
class Win32 (line 113) | private static class Win32
method GetScrollPos (line 115) | [DllImport("user32.dll", SetLastError = true)]
FILE: SAM.Picker/Program.cs
class Program (line 28) | internal static class Program
method Main (line 30) | [STAThread]
FILE: SAM.Picker/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
Condensed preview — 84 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (389K chars).
[
{
"path": ".appveyor.yml",
"chars": 903,
"preview": "version: 7.0.{build}\n\nbranches:\n only:\n - master\n\nskip_tags: true\nskip_commits:\n files:\n - .github/*\n - READM"
},
{
"path": ".gitattributes",
"chars": 2518,
"preview": "###############################################################################\n# Set default behavior to automatically "
},
{
"path": ".gitignore",
"chars": 6667,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
},
{
"path": "LICENSE.txt",
"chars": 889,
"preview": "zlib License\n\nCopyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n\nThis software is provided 'as-is', without any expres"
},
{
"path": "README.md",
"chars": 1253,
"preview": "# Steam Achievement Manager\n\nSteam Achievement Manager (SAM) is a lightweight, portable application used to manage achie"
},
{
"path": "SAM.API/CallHandle.cs",
"chars": 1027,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Callback.cs",
"chars": 1838,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Callbacks/AppDataChanged.cs",
"chars": 1134,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Callbacks/UserStatsReceived.cs",
"chars": 1140,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Client.cs",
"chars": 5522,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/ClientInitializeException.cs",
"chars": 1620,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/ClientInitializeFailure.cs",
"chars": 1180,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/GlobalSuppressions.cs",
"chars": 60784,
"preview": "[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1004:GenericMethodsShouldProvideTypePa"
},
{
"path": "SAM.API/ICallback.cs",
"chars": 1104,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/INativeWrapper.cs",
"chars": 1073,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Interfaces/ISteamApps001.cs",
"chars": 1153,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Interfaces/ISteamApps008.cs",
"chars": 2287,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Interfaces/ISteamClient018.cs",
"chars": 2890,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Interfaces/ISteamUser012.cs",
"chars": 1770,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Interfaces/ISteamUserStats013.cs",
"chars": 3137,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Interfaces/ISteamUtils005.cs",
"chars": 1911,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/LICENSE.txt",
"chars": 889,
"preview": "zlib License\n\nCopyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n\nThis software is provided 'as-is', without any expres"
},
{
"path": "SAM.API/NativeClass.cs",
"chars": 1168,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/NativeStrings.cs",
"chars": 3976,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/NativeWrapper.cs",
"chars": 2822,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/SAM.API.csproj",
"chars": 1058,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <Company>Gibbed</Company>\n <Authors>Gibbed</Authors>\n <De"
},
{
"path": "SAM.API/SAM.API.csproj.DotSettings",
"chars": 394,
"preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
},
{
"path": "SAM.API/Steam.cs",
"chars": 5433,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/AccountType.cs",
"chars": 1242,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/AppDataChanged.cs",
"chars": 1153,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/CallbackMessage.cs",
"chars": 1230,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/ItemRequestResult.cs",
"chars": 1219,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/UserItemsReceived.cs",
"chars": 1191,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/UserStatType.cs",
"chars": 1172,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/UserStatsReceived.cs",
"chars": 1194,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Types/UserStatsStored.cs",
"chars": 1158,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Wrappers/SteamApps001.cs",
"chars": 2180,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Wrappers/SteamApps008.cs",
"chars": 2052,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Wrappers/SteamClient018.cs",
"chars": 8023,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Wrappers/SteamUser012.cs",
"chars": 1922,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Wrappers/SteamUserStats013.cs",
"chars": 9053,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.API/Wrappers/SteamUtils005.cs",
"chars": 3353,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/DoubleBufferedListView.cs",
"chars": 1118,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/GlobalSuppressions.cs",
"chars": 12185,
"preview": "[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\","
},
{
"path": "SAM.Game/InvariantShorthand.cs",
"chars": 1173,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/KeyValue.cs",
"chars": 9111,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/KeyValueType.cs",
"chars": 1189,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/LICENSE.txt",
"chars": 889,
"preview": "zlib License\n\nCopyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n\nThis software is provided 'as-is', without any expres"
},
{
"path": "SAM.Game/Manager.Designer.cs",
"chars": 25002,
"preview": "namespace SAM.Game\n{\n partial class Manager\n {\n /// <summary>\n /// Required designer variable.\n "
},
{
"path": "SAM.Game/Manager.cs",
"chars": 31999,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Manager.resx",
"chars": 7868,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prima"
},
{
"path": "SAM.Game/Program.cs",
"chars": 4280,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Resources.Designer.cs",
"chars": 5660,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "SAM.Game/Resources.resx",
"chars": 7769,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "SAM.Game/SAM.Game.csproj",
"chars": 2114,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <AssemblyTitle>Steam Achievement Manager</AssemblyTitle>\n <C"
},
{
"path": "SAM.Game/SAM.Game.csproj.DotSettings",
"chars": 394,
"preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
},
{
"path": "SAM.Game/Stats/AchievementDefinition.cs",
"chars": 1384,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/AchievementInfo.cs",
"chars": 1546,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/FloatStatDefinition.cs",
"chars": 1198,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/FloatStatInfo.cs",
"chars": 1664,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/IntStatInfo.cs",
"chars": 1618,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/IntegerStatDefinition.cs",
"chars": 1236,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/StatDefinition.cs",
"chars": 1113,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/StatFlags.cs",
"chars": 1147,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/StatInfo.cs",
"chars": 1749,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/Stats/StatIsProtectedException.cs",
"chars": 1566,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/StreamHelpers.cs",
"chars": 3663,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Game/app.config",
"chars": 141,
"preview": "<?xml version=\"1.0\"?>\n<configuration>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></star"
},
{
"path": "SAM.Game/app.manifest",
"chars": 1171,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n <ass"
},
{
"path": "SAM.Picker/GameInfo.cs",
"chars": 1638,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Picker/GamePicker.Designer.cs",
"chars": 15403,
"preview": "namespace SAM.Picker\n{\n partial class GamePicker\n {\n /// <summary>\n /// Required designer variable."
},
{
"path": "SAM.Picker/GamePicker.cs",
"chars": 17497,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or i"
},
{
"path": "SAM.Picker/GamePicker.resx",
"chars": 23885,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prima"
},
{
"path": "SAM.Picker/GlobalSuppressions.cs",
"chars": 3373,
"preview": "[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Design\", \"CA1031:DoNotCatchGeneralExceptionTypes\","
},
{
"path": "SAM.Picker/InvariantShorthand.cs",
"chars": 1177,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Picker/LICENSE.txt",
"chars": 889,
"preview": "zlib License\n\nCopyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n\nThis software is provided 'as-is', without any expres"
},
{
"path": "SAM.Picker/LogoInfo.cs",
"chars": 1226,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Picker/MyListView.cs",
"chars": 3528,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Picker/Program.cs",
"chars": 3072,
"preview": "/* Copyright (c) 2024 Rick (rick 'at' gibbed 'dot' us)\n *\n * This software is provided 'as-is', without any express or "
},
{
"path": "SAM.Picker/Resources.Designer.cs",
"chars": 4224,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "SAM.Picker/Resources.resx",
"chars": 6815,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "SAM.Picker/SAM.Picker.csproj",
"chars": 2117,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <AssemblyTitle>Steam Achievement Manager Picker</AssemblyTitle>"
},
{
"path": "SAM.Picker/app.manifest",
"chars": 1171,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n <ass"
},
{
"path": "SAM.sln",
"chars": 1938,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.2880"
}
]
About this extraction
This page contains the full source code of the gibbed/SteamAchievementManager GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 84 files (362.9 KB), approximately 87.0k tokens, and a symbol index with 229 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.