steamworks-ffi-node 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -129
- package/THIRD_PARTY_LICENSES.md +24 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -18
- package/dist/index.js.map +1 -1
- package/dist/internal/SteamAPICore.d.ts +46 -0
- package/dist/internal/SteamAPICore.d.ts.map +1 -0
- package/dist/internal/SteamAPICore.js +185 -0
- package/dist/internal/SteamAPICore.js.map +1 -0
- package/dist/internal/SteamAchievementManager.d.ts +117 -0
- package/dist/internal/SteamAchievementManager.d.ts.map +1 -0
- package/dist/internal/SteamAchievementManager.js +673 -0
- package/dist/internal/SteamAchievementManager.js.map +1 -0
- package/dist/internal/SteamLibraryLoader.d.ts +52 -0
- package/dist/internal/SteamLibraryLoader.d.ts.map +1 -0
- package/dist/internal/SteamLibraryLoader.js +134 -0
- package/dist/internal/SteamLibraryLoader.js.map +1 -0
- package/dist/steam.d.ts +88 -30
- package/dist/steam.d.ts.map +1 -1
- package/dist/steam.js +126 -316
- package/dist/steam.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -4
package/dist/steam.js
CHANGED
|
@@ -1,51 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
3
|
+
const SteamLibraryLoader_1 = require("./internal/SteamLibraryLoader");
|
|
4
|
+
const SteamAPICore_1 = require("./internal/SteamAPICore");
|
|
5
|
+
const SteamAchievementManager_1 = require("./internal/SteamAchievementManager");
|
|
39
6
|
/**
|
|
40
7
|
* Real Steamworks SDK implementation using Koffi FFI
|
|
41
8
|
* This connects directly to the actual Steam client and Steamworks SDK
|
|
9
|
+
*
|
|
10
|
+
* Uses composition pattern with specialized modules:
|
|
11
|
+
* - SteamLibraryLoader: Handles FFI library loading and function binding
|
|
12
|
+
* - SteamAPICore: Manages Steam API lifecycle (init, shutdown, callbacks)
|
|
13
|
+
* - SteamAchievementManager: Handles all achievement operations
|
|
42
14
|
*/
|
|
43
15
|
class SteamworksSDK {
|
|
44
16
|
constructor() {
|
|
45
|
-
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
17
|
+
// Initialize composed modules
|
|
18
|
+
this.libraryLoader = new SteamLibraryLoader_1.SteamLibraryLoader();
|
|
19
|
+
this.apiCore = new SteamAPICore_1.SteamAPICore(this.libraryLoader);
|
|
20
|
+
this.achievementManager = new SteamAchievementManager_1.SteamAchievementManager(this.libraryLoader, this.apiCore);
|
|
49
21
|
}
|
|
50
22
|
static getInstance() {
|
|
51
23
|
if (!SteamworksSDK.instance) {
|
|
@@ -53,335 +25,173 @@ class SteamworksSDK {
|
|
|
53
25
|
}
|
|
54
26
|
return SteamworksSDK.instance;
|
|
55
27
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Get platform-specific Steam library path
|
|
58
|
-
*/
|
|
59
|
-
getSteamLibraryPath() {
|
|
60
|
-
const platform = process.platform;
|
|
61
|
-
const arch = process.arch;
|
|
62
|
-
let libPath;
|
|
63
|
-
if (platform === 'win32') {
|
|
64
|
-
if (arch === 'x64') {
|
|
65
|
-
libPath = path.join(__dirname, '../steamworks_sdk/redistributable_bin/win64/steam_api64.dll');
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
libPath = path.join(__dirname, '../steamworks_sdk/redistributable_bin/steam_api.dll');
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else if (platform === 'darwin') {
|
|
72
|
-
libPath = path.join(__dirname, '../steamworks_sdk/redistributable_bin/osx/libsteam_api.dylib');
|
|
73
|
-
}
|
|
74
|
-
else if (platform === 'linux') {
|
|
75
|
-
libPath = path.join(__dirname, '../steamworks_sdk/redistributable_bin/linux64/libsteam_api.so');
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
throw new Error(`Unsupported platform: ${platform}`);
|
|
79
|
-
}
|
|
80
|
-
// Check if the library exists
|
|
81
|
-
if (!fs.existsSync(libPath)) {
|
|
82
|
-
throw new Error(`Steamworks SDK library not found at: ${libPath}\n` +
|
|
83
|
-
'Please download Steamworks SDK and place it in the steamworks_sdk/ directory.');
|
|
84
|
-
}
|
|
85
|
-
return libPath;
|
|
86
|
-
}
|
|
87
28
|
/**
|
|
88
29
|
* Initialize Steam API with real Steamworks SDK
|
|
89
30
|
*/
|
|
90
31
|
init(options) {
|
|
91
|
-
|
|
92
|
-
this.appId = options.appId;
|
|
93
|
-
// Set Steam App ID in environment
|
|
94
|
-
process.env.SteamAppId = this.appId.toString();
|
|
95
|
-
// Also create steam_appid.txt file (Steam requirement)
|
|
96
|
-
const appIdFilePath = path.join(process.cwd(), 'steam_appid.txt');
|
|
97
|
-
fs.writeFileSync(appIdFilePath, this.appId.toString());
|
|
98
|
-
console.log(`🔌 Loading Steamworks SDK for App ID: ${this.appId}`);
|
|
99
|
-
// Load Steam API library using Koffi
|
|
100
|
-
const libPath = this.getSteamLibraryPath();
|
|
101
|
-
console.log(`📚 Loading library: ${libPath}`);
|
|
102
|
-
this.steamLib = koffi.load(libPath);
|
|
103
|
-
// Define function signatures using Koffi
|
|
104
|
-
this.SteamAPI_Init = this.steamLib.func('SteamAPI_InitSafe', 'bool', []);
|
|
105
|
-
this.SteamAPI_Shutdown = this.steamLib.func('SteamAPI_Shutdown', 'void', []);
|
|
106
|
-
this.SteamAPI_RunCallbacks = this.steamLib.func('SteamAPI_RunCallbacks', 'void', []);
|
|
107
|
-
this.SteamAPI_IsSteamRunning = this.steamLib.func('SteamAPI_IsSteamRunning', 'bool', []);
|
|
108
|
-
this.SteamAPI_SteamUserStats_v013 = this.steamLib.func('SteamAPI_SteamUserStats_v013', 'void*', []);
|
|
109
|
-
this.SteamAPI_SteamUser_v023 = this.steamLib.func('SteamAPI_SteamUser_v023', 'void*', []);
|
|
110
|
-
this.SteamAPI_ISteamUserStats_GetNumAchievements = this.steamLib.func('SteamAPI_ISteamUserStats_GetNumAchievements', 'uint32', ['void*']);
|
|
111
|
-
this.SteamAPI_ISteamUserStats_GetAchievementName = this.steamLib.func('SteamAPI_ISteamUserStats_GetAchievementName', 'str', ['void*', 'uint32']);
|
|
112
|
-
this.SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute = this.steamLib.func('SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute', 'str', ['void*', 'str', 'str']);
|
|
113
|
-
this.SteamAPI_ISteamUserStats_GetAchievement = this.steamLib.func('SteamAPI_ISteamUserStats_GetAchievement', 'bool', ['void*', 'str', 'bool*']);
|
|
114
|
-
this.SteamAPI_ISteamUserStats_SetAchievement = this.steamLib.func('SteamAPI_ISteamUserStats_SetAchievement', 'bool', ['void*', 'str']);
|
|
115
|
-
this.SteamAPI_ISteamUserStats_ClearAchievement = this.steamLib.func('SteamAPI_ISteamUserStats_ClearAchievement', 'bool', ['void*', 'str']);
|
|
116
|
-
this.SteamAPI_ISteamUserStats_StoreStats = this.steamLib.func('SteamAPI_ISteamUserStats_StoreStats', 'bool', ['void*']);
|
|
117
|
-
this.SteamAPI_ISteamUserStats_RequestCurrentStats = this.steamLib.func('SteamAPI_ISteamUserStats_RequestUserStats', 'uint64', ['void*', 'uint64']);
|
|
118
|
-
this.SteamAPI_ISteamUser_GetSteamID = this.steamLib.func('SteamAPI_ISteamUser_GetSteamID', 'uint64', ['void*']);
|
|
119
|
-
console.log('🚀 Initializing Steam API...');
|
|
120
|
-
// Initialize Steam API
|
|
121
|
-
const initResult = this.SteamAPI_Init();
|
|
122
|
-
if (!initResult) {
|
|
123
|
-
throw new Error('SteamAPI_Init() failed. Make sure Steam client is running and you\'re logged in.');
|
|
124
|
-
}
|
|
125
|
-
// Check if Steam is running
|
|
126
|
-
const steamRunning = this.SteamAPI_IsSteamRunning();
|
|
127
|
-
if (!steamRunning) {
|
|
128
|
-
console.warn('⚠️ Steam client might not be running properly');
|
|
129
|
-
}
|
|
130
|
-
// Get UserStats interface
|
|
131
|
-
this.userStatsInterface = this.SteamAPI_SteamUserStats_v013();
|
|
132
|
-
if (!this.userStatsInterface || this.userStatsInterface === null) {
|
|
133
|
-
throw new Error('Failed to get SteamUserStats interface');
|
|
134
|
-
}
|
|
135
|
-
// Request current stats from Steam servers
|
|
136
|
-
console.log('📊 Requesting current stats from Steam...');
|
|
137
|
-
// Use 0 as SteamID to request stats for current user
|
|
138
|
-
const statsRequested = this.SteamAPI_ISteamUserStats_RequestCurrentStats(this.userStatsInterface, 0);
|
|
139
|
-
if (!statsRequested) {
|
|
140
|
-
console.warn('⚠️ Failed to request current stats from Steam servers');
|
|
141
|
-
}
|
|
142
|
-
// Run callbacks to process any pending Steam events
|
|
143
|
-
this.SteamAPI_RunCallbacks();
|
|
144
|
-
this.initialized = true;
|
|
145
|
-
console.log('✅ Steam API initialized successfully!');
|
|
146
|
-
console.log(`🎮 Connected to Steam for App ID: ${this.appId}`);
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
console.error('❌ Failed to initialize Steam API:', error.message);
|
|
151
|
-
console.error('💡 Make sure:');
|
|
152
|
-
console.error(' 1. Steam client is running and you\'re logged in');
|
|
153
|
-
console.error(' 2. Steamworks SDK is in steamworks_sdk/ directory');
|
|
154
|
-
console.error(' 3. You have Visual Studio C++ Redistributable installed');
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
32
|
+
return this.apiCore.init(options);
|
|
157
33
|
}
|
|
158
34
|
/**
|
|
159
35
|
* Shutdown Steam API
|
|
160
36
|
*/
|
|
161
37
|
shutdown() {
|
|
162
|
-
|
|
163
|
-
console.log('🔌 Shutting down Steam API...');
|
|
164
|
-
this.SteamAPI_Shutdown();
|
|
165
|
-
this.initialized = false;
|
|
166
|
-
this.userStatsInterface = null;
|
|
167
|
-
console.log('✅ Steam API shutdown complete');
|
|
168
|
-
}
|
|
38
|
+
this.apiCore.shutdown();
|
|
169
39
|
}
|
|
170
40
|
/**
|
|
171
41
|
* Get current Steam status
|
|
172
42
|
*/
|
|
173
43
|
getStatus() {
|
|
174
|
-
|
|
175
|
-
if (this.initialized && this.steamLib) {
|
|
176
|
-
try {
|
|
177
|
-
const userInterface = this.SteamAPI_SteamUser_v023();
|
|
178
|
-
if (userInterface && userInterface !== null) {
|
|
179
|
-
const steamIdNum = this.SteamAPI_ISteamUser_GetSteamID(userInterface);
|
|
180
|
-
steamId = steamIdNum.toString();
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
console.warn('Failed to get Steam ID:', error.message);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return {
|
|
188
|
-
initialized: this.initialized,
|
|
189
|
-
appId: this.appId,
|
|
190
|
-
steamId
|
|
191
|
-
};
|
|
44
|
+
return this.apiCore.getStatus();
|
|
192
45
|
}
|
|
193
46
|
/**
|
|
194
47
|
* Get all achievements from Steam
|
|
195
48
|
*/
|
|
196
49
|
async getAllAchievements() {
|
|
197
|
-
|
|
198
|
-
console.warn('⚠️ Steam API not initialized');
|
|
199
|
-
return [];
|
|
200
|
-
}
|
|
201
|
-
try {
|
|
202
|
-
// Run callbacks to ensure we have latest data
|
|
203
|
-
this.SteamAPI_RunCallbacks();
|
|
204
|
-
const achievements = [];
|
|
205
|
-
const numAchievements = this.SteamAPI_ISteamUserStats_GetNumAchievements(this.userStatsInterface);
|
|
206
|
-
console.log(`📋 Found ${numAchievements} achievements in Steam`);
|
|
207
|
-
for (let i = 0; i < numAchievements; i++) {
|
|
208
|
-
try {
|
|
209
|
-
// Get achievement API name
|
|
210
|
-
const apiName = this.SteamAPI_ISteamUserStats_GetAchievementName(this.userStatsInterface, i);
|
|
211
|
-
if (!apiName)
|
|
212
|
-
continue;
|
|
213
|
-
// Get display name
|
|
214
|
-
const displayName = this.SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(this.userStatsInterface, apiName, 'name') || apiName;
|
|
215
|
-
// Get description
|
|
216
|
-
const description = this.SteamAPI_ISteamUserStats_GetAchievementDisplayAttribute(this.userStatsInterface, apiName, 'desc') || '';
|
|
217
|
-
// Check if unlocked
|
|
218
|
-
const unlockedPtr = koffi.alloc('bool', 1);
|
|
219
|
-
const hasAchievement = this.SteamAPI_ISteamUserStats_GetAchievement(this.userStatsInterface, apiName, unlockedPtr);
|
|
220
|
-
const unlocked = hasAchievement ? koffi.decode(unlockedPtr, 'bool') : false;
|
|
221
|
-
achievements.push({
|
|
222
|
-
apiName,
|
|
223
|
-
displayName,
|
|
224
|
-
description,
|
|
225
|
-
unlocked,
|
|
226
|
-
unlockTime: unlocked ? Date.now() : 0 // Steam doesn't provide unlock time easily
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
catch (error) {
|
|
230
|
-
console.warn(`Failed to get achievement ${i}:`, error.message);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
return achievements;
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
console.error('❌ Failed to get achievements:', error.message);
|
|
237
|
-
return [];
|
|
238
|
-
}
|
|
50
|
+
return this.achievementManager.getAllAchievements();
|
|
239
51
|
}
|
|
240
52
|
/**
|
|
241
53
|
* Unlock achievement in Steam
|
|
242
54
|
*/
|
|
243
|
-
async unlockAchievement(
|
|
244
|
-
|
|
245
|
-
console.warn('⚠️ Steam API not initialized');
|
|
246
|
-
return false;
|
|
247
|
-
}
|
|
248
|
-
try {
|
|
249
|
-
console.log(`🔓 Attempting to unlock achievement: ${apiName}`);
|
|
250
|
-
// Set the achievement
|
|
251
|
-
const result = this.SteamAPI_ISteamUserStats_SetAchievement(this.userStatsInterface, apiName);
|
|
252
|
-
if (result) {
|
|
253
|
-
// Store stats to commit the achievement to Steam servers
|
|
254
|
-
const storeResult = this.SteamAPI_ISteamUserStats_StoreStats(this.userStatsInterface);
|
|
255
|
-
if (storeResult) {
|
|
256
|
-
// Run callbacks to process the achievement unlock
|
|
257
|
-
this.SteamAPI_RunCallbacks();
|
|
258
|
-
console.log(`🏆 Achievement unlocked successfully: ${apiName}`);
|
|
259
|
-
return true;
|
|
260
|
-
}
|
|
261
|
-
else {
|
|
262
|
-
console.error(`❌ Failed to store stats for achievement: ${apiName}`);
|
|
263
|
-
return false;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
console.error(`❌ Failed to set achievement: ${apiName}`);
|
|
268
|
-
return false;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
console.error(`❌ Error unlocking achievement ${apiName}:`, error.message);
|
|
273
|
-
return false;
|
|
274
|
-
}
|
|
55
|
+
async unlockAchievement(achievementName) {
|
|
56
|
+
return this.achievementManager.unlockAchievement(achievementName);
|
|
275
57
|
}
|
|
276
58
|
/**
|
|
277
59
|
* Clear achievement in Steam (for testing)
|
|
278
60
|
*/
|
|
279
|
-
async clearAchievement(
|
|
280
|
-
|
|
281
|
-
console.warn('⚠️ Steam API not initialized');
|
|
282
|
-
return false;
|
|
283
|
-
}
|
|
284
|
-
try {
|
|
285
|
-
console.log(`🔒 Attempting to clear achievement: ${apiName}`);
|
|
286
|
-
// Clear the achievement
|
|
287
|
-
const result = this.SteamAPI_ISteamUserStats_ClearAchievement(this.userStatsInterface, apiName);
|
|
288
|
-
if (result) {
|
|
289
|
-
// Store stats to commit the change to Steam servers
|
|
290
|
-
const storeResult = this.SteamAPI_ISteamUserStats_StoreStats(this.userStatsInterface);
|
|
291
|
-
if (storeResult) {
|
|
292
|
-
// Run callbacks to process the change
|
|
293
|
-
this.SteamAPI_RunCallbacks();
|
|
294
|
-
console.log(`🔒 Achievement cleared successfully: ${apiName}`);
|
|
295
|
-
return true;
|
|
296
|
-
}
|
|
297
|
-
else {
|
|
298
|
-
console.error(`❌ Failed to store stats for clearing achievement: ${apiName}`);
|
|
299
|
-
return false;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
console.error(`❌ Failed to clear achievement: ${apiName}`);
|
|
304
|
-
return false;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
catch (error) {
|
|
308
|
-
console.error(`❌ Error clearing achievement ${apiName}:`, error.message);
|
|
309
|
-
return false;
|
|
310
|
-
}
|
|
61
|
+
async clearAchievement(achievementName) {
|
|
62
|
+
return this.achievementManager.clearAchievement(achievementName);
|
|
311
63
|
}
|
|
312
64
|
/**
|
|
313
65
|
* Check if achievement is unlocked
|
|
314
66
|
*/
|
|
315
|
-
async isAchievementUnlocked(
|
|
316
|
-
|
|
317
|
-
return false;
|
|
318
|
-
}
|
|
319
|
-
try {
|
|
320
|
-
const unlockedPtr = koffi.alloc('bool', 1);
|
|
321
|
-
const hasAchievement = this.SteamAPI_ISteamUserStats_GetAchievement(this.userStatsInterface, apiName, unlockedPtr);
|
|
322
|
-
return hasAchievement ? koffi.decode(unlockedPtr, 'bool') : false;
|
|
323
|
-
}
|
|
324
|
-
catch (error) {
|
|
325
|
-
console.error(`❌ Error checking achievement ${apiName}:`, error.message);
|
|
326
|
-
return false;
|
|
327
|
-
}
|
|
67
|
+
async isAchievementUnlocked(achievementName) {
|
|
68
|
+
return this.achievementManager.isAchievementUnlocked(achievementName);
|
|
328
69
|
}
|
|
329
70
|
/**
|
|
330
71
|
* Get achievement by API name
|
|
331
72
|
*/
|
|
332
|
-
async
|
|
333
|
-
|
|
334
|
-
return achievements.find(a => a.apiName === apiName) || null;
|
|
73
|
+
async getAchievementByName(achievementName) {
|
|
74
|
+
return this.achievementManager.getAchievementByName(achievementName);
|
|
335
75
|
}
|
|
336
76
|
/**
|
|
337
77
|
* Get total number of achievements
|
|
338
78
|
*/
|
|
339
|
-
async
|
|
340
|
-
|
|
341
|
-
return 0;
|
|
342
|
-
}
|
|
343
|
-
try {
|
|
344
|
-
return this.SteamAPI_ISteamUserStats_GetNumAchievements(this.userStatsInterface);
|
|
345
|
-
}
|
|
346
|
-
catch (error) {
|
|
347
|
-
console.error('❌ Error getting achievement count:', error.message);
|
|
348
|
-
return 0;
|
|
349
|
-
}
|
|
79
|
+
async getTotalAchievementCount() {
|
|
80
|
+
return this.achievementManager.getTotalAchievementCount();
|
|
350
81
|
}
|
|
351
82
|
/**
|
|
352
83
|
* Get number of unlocked achievements
|
|
353
84
|
*/
|
|
354
|
-
async
|
|
355
|
-
|
|
356
|
-
return achievements.filter(a => a.unlocked).length;
|
|
85
|
+
async getUnlockedAchievementCount() {
|
|
86
|
+
return this.achievementManager.getUnlockedAchievementCount();
|
|
357
87
|
}
|
|
358
88
|
/**
|
|
359
89
|
* Run Steam callbacks to process pending events
|
|
360
90
|
*/
|
|
361
91
|
runCallbacks() {
|
|
362
|
-
|
|
363
|
-
try {
|
|
364
|
-
this.SteamAPI_RunCallbacks();
|
|
365
|
-
}
|
|
366
|
-
catch (error) {
|
|
367
|
-
console.warn('Warning: Error running Steam callbacks:', error.message);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
92
|
+
this.apiCore.runCallbacks();
|
|
370
93
|
}
|
|
371
94
|
/**
|
|
372
95
|
* Check if Steam client is running
|
|
373
96
|
*/
|
|
374
97
|
isSteamRunning() {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
98
|
+
return this.apiCore.isSteamRunning();
|
|
99
|
+
}
|
|
100
|
+
// ===== VISUAL & UI FEATURES =====
|
|
101
|
+
/**
|
|
102
|
+
* Get achievement icon handle for use with ISteamUtils::GetImageRGBA()
|
|
103
|
+
*/
|
|
104
|
+
async getAchievementIcon(achievementName) {
|
|
105
|
+
return this.achievementManager.getAchievementIcon(achievementName);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Show achievement progress notification in Steam overlay
|
|
109
|
+
*/
|
|
110
|
+
async indicateAchievementProgress(achievementName, currentProgress, maxProgress) {
|
|
111
|
+
return this.achievementManager.indicateAchievementProgress(achievementName, currentProgress, maxProgress);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get all achievements with icon handles
|
|
115
|
+
*/
|
|
116
|
+
async getAllAchievementsWithIcons() {
|
|
117
|
+
return this.achievementManager.getAllAchievementsWithIcons();
|
|
118
|
+
}
|
|
119
|
+
// ===== PROGRESS TRACKING =====
|
|
120
|
+
/**
|
|
121
|
+
* Get achievement progress limits (integer-based)
|
|
122
|
+
*/
|
|
123
|
+
async getAchievementProgressLimitsInt(achievementName) {
|
|
124
|
+
return this.achievementManager.getAchievementProgressLimitsInt(achievementName);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get achievement progress limits (float-based)
|
|
128
|
+
*/
|
|
129
|
+
async getAchievementProgressLimitsFloat(achievementName) {
|
|
130
|
+
return this.achievementManager.getAchievementProgressLimitsFloat(achievementName);
|
|
131
|
+
}
|
|
132
|
+
// ===== FRIEND/USER ACHIEVEMENTS =====
|
|
133
|
+
/**
|
|
134
|
+
* Request achievement stats for another user (friend)
|
|
135
|
+
* This is async - wait for callback before calling getUserAchievement()
|
|
136
|
+
*/
|
|
137
|
+
async requestUserStats(steamId) {
|
|
138
|
+
return this.achievementManager.requestUserStats(steamId);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get achievement status for another user (friend)
|
|
142
|
+
* Must call requestUserStats() first and wait for callback
|
|
143
|
+
*/
|
|
144
|
+
async getUserAchievement(steamId, achievementName) {
|
|
145
|
+
return this.achievementManager.getUserAchievement(steamId, achievementName);
|
|
146
|
+
}
|
|
147
|
+
// ===== GLOBAL STATISTICS =====
|
|
148
|
+
/**
|
|
149
|
+
* Request global achievement percentages from Steam
|
|
150
|
+
* This is async - wait for callback before calling other global stats methods
|
|
151
|
+
*/
|
|
152
|
+
async requestGlobalAchievementPercentages() {
|
|
153
|
+
return this.achievementManager.requestGlobalAchievementPercentages();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get percentage of users who unlocked a specific achievement
|
|
157
|
+
* Must call requestGlobalAchievementPercentages() first
|
|
158
|
+
*/
|
|
159
|
+
async getAchievementAchievedPercent(achievementName) {
|
|
160
|
+
return this.achievementManager.getAchievementAchievedPercent(achievementName);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get all achievements with global unlock percentages
|
|
164
|
+
* Must call requestGlobalAchievementPercentages() first
|
|
165
|
+
*/
|
|
166
|
+
async getAllAchievementsWithGlobalStats() {
|
|
167
|
+
return this.achievementManager.getAllAchievementsWithGlobalStats();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get most achieved achievement
|
|
171
|
+
*/
|
|
172
|
+
async getMostAchievedAchievementInfo() {
|
|
173
|
+
return this.achievementManager.getMostAchievedAchievementInfo();
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get next most achieved achievement (iterate by popularity)
|
|
177
|
+
*/
|
|
178
|
+
async getNextMostAchievedAchievementInfo(previousIterator) {
|
|
179
|
+
return this.achievementManager.getNextMostAchievedAchievementInfo(previousIterator);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get all achievements sorted by global popularity (most achieved first)
|
|
183
|
+
* Must call requestGlobalAchievementPercentages() first
|
|
184
|
+
*/
|
|
185
|
+
async getAllAchievementsSortedByPopularity() {
|
|
186
|
+
return this.achievementManager.getAllAchievementsSortedByPopularity();
|
|
187
|
+
}
|
|
188
|
+
// ===== TESTING & DEVELOPMENT =====
|
|
189
|
+
/**
|
|
190
|
+
* Reset all stats and optionally achievements
|
|
191
|
+
* WARNING: This clears ALL user stats and achievements!
|
|
192
|
+
*/
|
|
193
|
+
async resetAllStats(includeAchievements = false) {
|
|
194
|
+
return this.achievementManager.resetAllStats(includeAchievements);
|
|
385
195
|
}
|
|
386
196
|
}
|
|
387
197
|
exports.default = SteamworksSDK;
|
package/dist/steam.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steam.js","sourceRoot":"","sources":["../src/steam.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"steam.js","sourceRoot":"","sources":["../src/steam.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export interface SteamAchievement {
|
|
|
4
4
|
description: string;
|
|
5
5
|
unlocked: boolean;
|
|
6
6
|
unlockTime: number;
|
|
7
|
+
hidden?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export interface SteamInitOptions {
|
|
9
10
|
appId: number;
|
|
@@ -13,4 +14,26 @@ export interface SteamStatus {
|
|
|
13
14
|
appId: number;
|
|
14
15
|
steamId: string;
|
|
15
16
|
}
|
|
17
|
+
export interface AchievementProgressLimits {
|
|
18
|
+
minProgress: number;
|
|
19
|
+
maxProgress: number;
|
|
20
|
+
}
|
|
21
|
+
export interface UserAchievement {
|
|
22
|
+
steamId: string;
|
|
23
|
+
apiName: string;
|
|
24
|
+
displayName: string;
|
|
25
|
+
description: string;
|
|
26
|
+
unlocked: boolean;
|
|
27
|
+
unlockTime: number;
|
|
28
|
+
}
|
|
29
|
+
export interface AchievementGlobalStats {
|
|
30
|
+
apiName: string;
|
|
31
|
+
displayName: string;
|
|
32
|
+
description: string;
|
|
33
|
+
unlocked: boolean;
|
|
34
|
+
globalUnlockPercentage: number;
|
|
35
|
+
}
|
|
36
|
+
export interface AchievementWithIcon extends SteamAchievement {
|
|
37
|
+
iconHandle: number;
|
|
38
|
+
}
|
|
16
39
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAGD,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "steamworks-ffi-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Real Steamworks SDK wrapper using FFI for Node.js/Electron - Full Steam Integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "tsc",
|
|
9
|
-
"start": "node test.js",
|
|
10
|
-
"test": "node test.js",
|
|
9
|
+
"start": "node test-complete-achievements.js",
|
|
10
|
+
"test": "node test-complete-achievements.js",
|
|
11
11
|
"prepublishOnly": "npm run build"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
"dist/**/*",
|
|
22
22
|
"steamworks_sdk/redistributable_bin/**/*",
|
|
23
23
|
"README.md",
|
|
24
|
-
"LICENSE"
|
|
24
|
+
"LICENSE",
|
|
25
|
+
"THIRD_PARTY_LICENSES.md"
|
|
25
26
|
],
|
|
26
27
|
"keywords": [
|
|
27
28
|
"steam",
|