Документация SDK

Интегрируйте вашу HTML5-игру с платформой F-Fest для доступа к сохранениям, ачивкам и многому другому.

1. Интеграция

Платформа автоматически внедряет загрузчик SDK в вашу игру. Вам не нужно ничего подключать вручную. Просто убедитесь, что в вашем index.html есть тег <head> или <body>.

После загрузки SDK будет доступен глобальный объект window.fFestSdk. Вся работа с SDK происходит через этот объект.

2. Инициализация

Прежде чем использовать любую функцию SDK, его необходимо инициализировать. Этот процесс асинхронный. Рекомендуется обернуть основной код вашей игры в функцию и вызывать её после успешной инициализации.

// Пример в вашем основном JS-файле
async function main() {
    try {
        const user = await window.fFestSdk.init();
        console.log('SDK готов. Пользователь:', user.username);
        
        // Здесь начинается ваша игра
        startGame();

    } catch (error) {
        console.error('Ошибка инициализации SDK:', error);
        // Показать ошибку игроку
        showErrorScreen(error.message);
    }
}

// Вызываем основную функцию
main();

3. Данные игрока

После инициализации вы можете получить информацию о текущем игроке.

fFestSdk.player.get()

Возвращает объект с данными игрока. Доступно только после init().

const player = window.fFestSdk.player.get();

if (player) {
    console.log('ID игрока:', player.id);
    console.log('Никнейм:', player.username);
}

4. Хранилище данных

Используйте хранилище для сохранения и загрузки прогресса игрока. Данные надежно шифруются и хранятся на сервере, привязанные к аккаунту игрока и вашей игре.

fFestSdk.storage.save(key, value)

Сохраняет данные. key — строка, value — любой JSON-сериализуемый объект.

const gameState = {
    level: 5,
    score: 12500,
    inventory: ['sword', 'shield']
};

window.fFestSdk.storage.save('gameState', gameState)
    .then(() => console.log('Игра сохранена!'))
    .catch(err => console.error('Ошибка сохранения:', err));

fFestSdk.storage.load(key)

Загружает данные по ключу.

window.fFestSdk.storage.load('gameState')
    .then(data => {
        if (data) {
            console.log('Загружены данные:', data);
            // Применить загруженное состояние
        } else {
            console.log('Сохранений нет, начинаем новую игру.');
        }
    })
    .catch(err => console.error('Ошибка загрузки:', err));

5. Достижения

Вы можете создавать и выдавать достижения игрокам. Ачивки создаются "на лету" при первом вызове.

fFestSdk.achievements.unlock(achievementData)

Открывает (и при необходимости создает) достижение.

ПараметрТипОписание
keystringУникальный ключ достижения в рамках вашей игры (например, 'FIRST_WIN').
namestringНазвание достижения.
descriptionstringОписание.
iconMode'SVG' | 'FILE'Режим иконки. 'SVG' для inline SVG, 'FILE' для пути к файлу.
iconValuestringСодержимое SVG или относительный путь к файлу иконки в архиве игры.
window.fFestSdk.achievements.unlock({
    key: 'TUTORIAL_COMPLETE',
    name: 'Первые шаги',
    description: 'Вы успешно завершили обучение.',
    iconMode: 'SVG',
    iconValue: '<svg viewBox="0 0 24 24">...</svg>'
}).then(result => {
    if (result.newlyUnlocked) {
        console.log('Новое достижение открыто!');
    }
});

6. Учет времени в игре

Платформа автоматически отслеживает время, проведенное в игре, пока вкладка активна. Однако, для более точного учета (например, если в игре есть пауза), вы можете отправлять "хартбиты".

fFestSdk.heartbeat()

Сообщает серверу, что игрок активен. Рекомендуется вызывать раз в 10-15 секунд, когда игра не на паузе.

setInterval(() => {
    if (!game.isPaused) {
        window.fFestSdk.heartbeat();
    }
}, 10000);

7. Турниры

Если ваша игра участвует в турнире, вы можете отправлять счет игрока на сервер.

fFestSdk.tournaments.submitScore(score)

Отправляет счет. score — число. Сервер автоматически засчитает его для активного турнира, если он есть для этой игры, и обновит только если новый счет больше предыдущего.

function onGameOver(finalScore) {
    window.fFestSdk.tournaments.submitScore(finalScore)
        .then(() => console.log('Счет отправлен!'))
        .catch(err => console.error('Ошибка отправки счета:', err));
}