SteamAchievementManager API文档:开发人员必备参考
1. 概述
SteamAchievementManager(SAM)是一个开源的Steam成就管理工具,提供了与Steam客户端交互的API,允许开发者查询和修改游戏成就及统计数据。本文档详细介绍SAM API的核心组件、使用方法及示例,帮助开发人员快速集成Steam成就管理功能。
2. API架构
SAM API采用分层架构设计,主要包含客户端管理、Steam接口封装和回调处理三大模块:
2.1 核心命名空间
| 命名空间 | 说明 |
|---|---|
SAM.API | 核心API实现,包含客户端管理和Steam接口封装 |
SAM.API.Wrappers | Steam接口封装类,如SteamUserStats007 |
SAM.API.Types | 数据类型定义,如成就和统计信息结构 |
SAM.API.Interfaces | Steam接口定义 |
3. 快速开始
3.1 环境准备
-
克隆仓库:
git clone https://gitcode.com/gh_mirrors/st/SteamAchievementManager -
引用必要的DLL:
SAM.API.dll:核心API功能SAM.Game.dll:游戏相关辅助类
3.2 初始化客户端
using SAM.API;
// 创建并初始化客户端
var client = new Client();
try
{
client.Initialize(480); // 480是"Left 4 Dead 2"的AppID
Console.WriteLine("客户端初始化成功");
}
catch (ClientInitializeException ex)
{
Console.WriteLine($"初始化失败: {ex.Message}");
}
4. 核心组件详解
4.1 Client类
Client类是API的入口点,负责初始化Steam连接并提供访问Steam接口的属性。
4.1.1 主要属性
| 属性 | 类型 | 说明 |
|---|---|---|
SteamClient | SteamClient018 | Steam客户端接口 |
SteamUser | SteamUser012 | Steam用户接口 |
SteamUserStats | SteamUserStats007 | 成就和统计接口 |
SteamUtils | SteamUtils005 | Steam工具接口 |
4.1.2 Initialize方法
public void Initialize(long appId)
功能:初始化Steam客户端连接。
参数:
appId:游戏的Steam应用ID(0表示不指定特定游戏)
异常:
ClientInitializeException:初始化失败时抛出,包含失败原因
初始化流程:
4.2 SteamUserStats007类
SteamUserStats007封装了与成就和统计相关的所有操作,是API中最常用的类之一。
4.2.1 成就管理方法
| 方法 | 说明 |
|---|---|
GetAchievementState(string name, out bool isAchieved) | 获取成就状态 |
SetAchievement(string name, bool state) | 设置成就状态 |
GetAchievementIcon(string name) | 获取成就图标ID |
GetAchievementDisplayAttribute(string name, string key) | 获取成就显示属性(名称、描述等) |
示例:获取和设置成就
// 获取成就状态
bool isAchieved;
if (client.SteamUserStats.GetAchievementState("ACHIEVEMENT_KILL_100_ZOMBIES", out isAchieved))
{
Console.WriteLine($"成就状态: {(isAchieved ? "已解锁" : "未解锁")}");
}
// 解锁成就
if (client.SteamUserStats.SetAchievement("ACHIEVEMENT_KILL_100_ZOMBIES", true))
{
Console.WriteLine("成就已解锁");
// 保存更改
client.SteamUserStats.StoreStats();
}
4.2.2 统计数据管理方法
| 方法 | 说明 |
|---|---|
RequestCurrentStats() | 请求当前用户的统计数据 |
GetStatValue(string name, out int value) | 获取整数型统计值 |
GetStatValue(string name, out float value) | 获取浮点型统计值 |
SetStatValue(string name, int value) | 设置整数型统计值 |
SetStatValue(string name, float value) | 设置浮点型统计值 |
StoreStats() | 保存统计数据更改 |
ResetAllStats(bool achievementsToo) | 重置所有统计数据(可选重置成就) |
示例:操作统计数据
// 请求统计数据
if (client.SteamUserStats.RequestCurrentStats())
{
// 获取统计值
if (client.SteamUserStats.GetStatValue("ZOMBIES_KILLED", out int kills))
{
Console.WriteLine($"已杀死僵尸: {kills}");
}
// 设置统计值
client.SteamUserStats.SetStatValue("ZOMBIES_KILLED", kills + 10);
// 保存更改
client.SteamUserStats.StoreStats();
}
4.3 回调系统
SAM API提供回调机制,用于处理异步事件(如成就解锁通知、统计数据接收等)。
4.3.1 使用回调
// 创建并注册成就解锁回调
var achievementCallback = client.CreateAndRegisterCallback<Callbacks.AchievementUnlockedCallback>();
achievementCallback.OnUnlocked += (sender, e) =>
{
Console.WriteLine($"成就解锁: {e.AchievementName}");
};
// 处理回调
client.RunCallbacks(false);
4.3.2 常用回调类型
| 回调类型 | 说明 |
|---|---|
UserStatsReceived | 统计数据接收完成时触发 |
UserStatsStored | 统计数据保存完成时触发 |
AchievementUnlockedCallback | 成就解锁时触发 |
5. 错误处理
5.1 常见异常
| 异常类型 | 说明 |
|---|---|
ClientInitializeException | 客户端初始化失败 |
StatIsProtectedException | 尝试修改受保护的统计数据 |
5.2 错误处理示例
try
{
// 请求统计数据
if (!client.SteamUserStats.RequestCurrentStats())
{
Console.WriteLine("请求统计数据失败");
return;
}
// 尝试设置受保护的统计数据
client.SteamUserStats.SetStatValue("PROTECTED_STAT", 100);
}
catch (StatIsProtectedException ex)
{
Console.WriteLine($"无法修改统计数据: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
6. 最佳实践
6.1 资源管理
始终在使用完Client实例后调用Dispose()方法释放资源:
using (var client = new Client())
{
client.Initialize(480);
// 使用客户端...
} // 自动调用Dispose()
6.2 性能优化
- 批量处理成就和统计数据更改,减少
StoreStats()调用次数 - 在UI应用中,使用单独的线程处理回调,避免阻塞UI线程
6.3 安全性考虑
- 仅修改您拥有或有权修改的游戏的成就数据
- 避免在生产环境中使用API进行未授权的成就修改
- 注意Steam的反作弊机制,不当使用可能导致账号处罚
7. 高级示例:成就管理器
以下是一个完整的成就管理器示例,展示如何初始化客户端、获取成就列表并修改成就状态:
using System;
using SAM.API;
using SAM.API.Wrappers;
class AchievementManager
{
private Client _client;
private ulong _appId;
public AchievementManager(ulong appId)
{
_appId = appId;
_client = new Client();
}
public bool Connect()
{
try
{
_client.Initialize(_appId);
Console.WriteLine("已连接到Steam");
// 请求统计数据
if (!_client.SteamUserStats.RequestCurrentStats())
{
Console.WriteLine("无法请求统计数据");
return false;
}
return true;
}
catch (Exception ex)
{
Console.WriteLine($"连接失败: {ex.Message}");
return false;
}
}
public void ListAchievements()
{
// 注意: 实际应用中需要枚举成就名称
string[] achievementNames = { "ACHIEVEMENT_1", "ACHIEVEMENT_2", "ACHIEVEMENT_3" };
Console.WriteLine("\n成就列表:");
foreach (var name in achievementNames)
{
if (_client.SteamUserStats.GetAchievementState(name, out bool isAchieved))
{
string displayName = _client.SteamUserStats.GetAchievementDisplayAttribute(name, "name");
Console.WriteLine($"- {displayName}: {(isAchieved ? "已解锁" : "未解锁")}");
}
}
}
public void UnlockAllAchievements()
{
string[] achievementNames = { "ACHIEVEMENT_1", "ACHIEVEMENT_2", "ACHIEVEMENT_3" };
foreach (var name in achievementNames)
{
_client.SteamUserStats.SetAchievement(name, true);
Console.WriteLine($"解锁成就: {name}");
}
// 保存更改
if (_client.SteamUserStats.StoreStats())
{
Console.WriteLine("所有成就已解锁并保存");
}
else
{
Console.WriteLine("保存成就失败");
}
}
public void Disconnect()
{
_client.Dispose();
Console.WriteLine("已断开与Steam的连接");
}
}
// 使用示例
class Program
{
static void Main(string[] args)
{
var manager = new AchievementManager(480); // Left 4 Dead 2
if (manager.Connect())
{
manager.ListAchievements();
manager.UnlockAllAchievements();
manager.Disconnect();
}
}
}
8. 总结
SteamAchievementManager API提供了强大的功能,使开发者能够轻松与Steam的成就和统计系统交互。通过Client类初始化连接,使用SteamUserStats007类管理成就和统计数据,并利用回调系统处理异步事件,您可以构建各种成就管理工具和游戏辅助应用。
关键要点:
Client.Initialize()是使用API的第一步SteamUserStats007是成就和统计管理的核心- 始终处理可能的异常并正确释放资源
- 遵守Steam的使用条款,避免不当使用API
9. 附录:API参考
9.1 SteamUserStats007方法速查表
| 方法 | 功能 | 参数 | 返回值 |
|---|---|---|---|
RequestCurrentStats() | 请求用户统计数据 | - | bool:成功/失败 |
GetStatValue(string, out int) | 获取整数统计值 | name:统计名称value:输出值 | bool:成功/失败 |
GetStatValue(string, out float) | 获取浮点统计值 | name:统计名称value:输出值 | bool:成功/失败 |
SetStatValue(string, int) | 设置整数统计值 | name:统计名称value:新值 | bool:成功/失败 |
SetStatValue(string, float) | 设置浮点统计值 | name:统计名称value:新值 | bool:成功/失败 |
GetAchievementState(string, out bool) | 获取成就状态 | name:成就名称isAchieved:输出状态 | bool:成功/失败 |
SetAchievement(string, bool) | 设置成就状态 | name:成就名称state:新状态 | bool:成功/失败 |
StoreStats() | 保存统计数据更改 | - | bool:成功/失败 |
ResetAllStats(bool) | 重置所有统计 | achievementsToo:是否同时重置成就 | bool:成功/失败 |
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



