187 lines
4.2 KiB
JavaScript
187 lines
4.2 KiB
JavaScript
// Steam Integration Example
|
|
// This example shows how to use Steam achievements and stats
|
|
|
|
var steam = use("steam");
|
|
|
|
// Achievement names (these should match your Steam app configuration)
|
|
var ACHIEVEMENTS = {
|
|
FIRST_WIN: "ACH_FIRST_WIN",
|
|
PLAY_10_GAMES: "ACH_PLAY_10_GAMES",
|
|
HIGH_SCORE: "ACH_HIGH_SCORE_1000"
|
|
};
|
|
|
|
// Stat names
|
|
var STATS = {
|
|
GAMES_PLAYED: "stat_games_played",
|
|
TOTAL_SCORE: "stat_total_score",
|
|
PLAY_TIME: "stat_play_time"
|
|
};
|
|
|
|
var steam_available = false;
|
|
var stats_loaded = false;
|
|
|
|
// Initialize Steam
|
|
function init_steam() {
|
|
if (!steam) {
|
|
console.log("Steam module not available");
|
|
return false;
|
|
}
|
|
|
|
console.log("Initializing Steam...");
|
|
steam_available = steam.steam_init();
|
|
|
|
if (steam_available) {
|
|
console.log("Steam initialized successfully");
|
|
|
|
// Request current stats/achievements
|
|
if (steam.stats.stats_request()) {
|
|
console.log("Stats requested");
|
|
stats_loaded = true;
|
|
}
|
|
} else {
|
|
console.log("Failed to initialize Steam");
|
|
}
|
|
|
|
return steam_available;
|
|
}
|
|
|
|
// Update Steam (call this regularly, e.g., once per frame)
|
|
function update_steam() {
|
|
if (steam_available) {
|
|
steam.steam_run_callbacks();
|
|
}
|
|
}
|
|
|
|
// Unlock an achievement
|
|
function unlock_achievement(achievement_name) {
|
|
if (!steam_available || !stats_loaded) return false;
|
|
|
|
// Check if already unlocked
|
|
var unlocked = steam.achievement.achievement_get(achievement_name);
|
|
if (unlocked) {
|
|
console.log("Achievement already unlocked:", achievement_name);
|
|
return true;
|
|
}
|
|
|
|
// Unlock it
|
|
if (steam.achievement.achievement_set(achievement_name)) {
|
|
console.log("Achievement unlocked:", achievement_name);
|
|
|
|
// Store stats to make it permanent
|
|
steam.stats.stats_store();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Update a stat
|
|
function update_stat(stat_name, value, is_float) {
|
|
if (!steam_available || !stats_loaded) return false;
|
|
|
|
var success;
|
|
if (is_float) {
|
|
success = steam.stats.stats_set_float(stat_name, value);
|
|
} else {
|
|
success = steam.stats.stats_set_int(stat_name, value);
|
|
}
|
|
|
|
if (success) {
|
|
console.log("Stat updated:", stat_name, "=", value);
|
|
steam.stats.stats_store();
|
|
}
|
|
|
|
return success;
|
|
}
|
|
|
|
// Get a stat value
|
|
function get_stat(stat_name, is_float) {
|
|
if (!steam_available || !stats_loaded) return 0;
|
|
|
|
if (is_float) {
|
|
return steam.stats.stats_get_float(stat_name) || 0;
|
|
} else {
|
|
return steam.stats.stats_get_int(stat_name) || 0;
|
|
}
|
|
}
|
|
|
|
// Example game logic
|
|
var games_played = 0;
|
|
var total_score = 0;
|
|
var current_score = 0;
|
|
|
|
function start_game() {
|
|
games_played = get_stat(STATS.GAMES_PLAYED, false);
|
|
total_score = get_stat(STATS.TOTAL_SCORE, false);
|
|
current_score = 0;
|
|
|
|
console.log("Starting game #" + (games_played + 1));
|
|
}
|
|
|
|
function end_game(score) {
|
|
current_score = score;
|
|
games_played++;
|
|
total_score += score;
|
|
|
|
// Update stats
|
|
update_stat(STATS.GAMES_PLAYED, games_played, false);
|
|
update_stat(STATS.TOTAL_SCORE, total_score, false);
|
|
|
|
// Check for achievements
|
|
if (games_played === 1) {
|
|
unlock_achievement(ACHIEVEMENTS.FIRST_WIN);
|
|
}
|
|
|
|
if (games_played >= 10) {
|
|
unlock_achievement(ACHIEVEMENTS.PLAY_10_GAMES);
|
|
}
|
|
|
|
if (score >= 1000) {
|
|
unlock_achievement(ACHIEVEMENTS.HIGH_SCORE);
|
|
}
|
|
}
|
|
|
|
// Cloud save example
|
|
function save_to_cloud(save_data) {
|
|
if (!steam_available) return false;
|
|
|
|
var json_data = JSON.stringify(save_data);
|
|
return steam.cloud.cloud_write("savegame.json", json_data);
|
|
}
|
|
|
|
function load_from_cloud() {
|
|
if (!steam_available) return null;
|
|
|
|
var data = steam.cloud.cloud_read("savegame.json");
|
|
if (data) {
|
|
// Convert ArrayBuffer to string
|
|
var decoder = new TextDecoder();
|
|
var json_str = decoder.decode(data);
|
|
return JSON.parse(json_str);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// Cleanup
|
|
function cleanup_steam() {
|
|
if (steam_available) {
|
|
steam.steam_shutdown();
|
|
console.log("Steam shut down");
|
|
}
|
|
}
|
|
|
|
// Export the API
|
|
module.exports = {
|
|
init: init_steam,
|
|
update: update_steam,
|
|
cleanup: cleanup_steam,
|
|
unlock_achievement: unlock_achievement,
|
|
update_stat: update_stat,
|
|
get_stat: get_stat,
|
|
start_game: start_game,
|
|
end_game: end_game,
|
|
save_to_cloud: save_to_cloud,
|
|
load_from_cloud: load_from_cloud,
|
|
is_available: function() { return steam_available; }
|
|
}; |