Skip to content

megalanthus/defold-gamescore

Repository files navigation

GameScore Logo

GameScore for Defold

Данное расширение больше не будет поддерживаться, переходите на расширение GamePush

GameScore расширение для движка Defold. GameScore это сервис для удобной публикации HTML5 игр на разных платформах с одним SDK. Сервисом поддерживается локальная отладка игры.

Установка

Вы можете использовать его в своем собственном проекте, добавив этот проект в качестве зависимости библиотеки Defold.

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

В файл game.project необходимо добавить раздел gamescore и указать id и token игры, остальные параметры можно опустить:

[gamescore]
id = идентификатор игры
token = токен
description = There are not enough words to describe the awesomeness of the game
image = /img/ogimage.png

Дополнительные параметры: (doc)

Для начала необходимо инициализировать SDK с помощью метода init:

local gamescore = require("gamescore.gamescore")

gamescore.init(function(success)
    if success then
        -- инициализация прошла успешно
    else
        -- ошибка инициализации
    end
end)

Для подписки на событие необходимо определить соответсвующий метод таблицы callbacks:

local gamescore = require("gamescore.gamescore")

local function ads_start()
    -- выключаем звук
end

local function ads_end(success)
    -- включаем звук
end

local function ads_reward()
    -- подкидываем золотишка игроку
end

-- функции событий можно назначить до инициализации SDK
gamescore.callbacks.ads_start = ads_start
gamescore.callbacks.ads_end = ads_end
gamescore.callbacks.ads_rewarded_reward = ads_reward
-- инициализация SDK
gamescore.init(function(success)
    if success then
        -- показываем прелоадер
        gamescore.ads_show_preloader(function(result)
            -- реклама закрыта, можно что-то делать
        end)
        -- что то делаем еще

        -- показываем рекламу за вознаграждение 
        gamescore.ads_show_rewarded_video()

        -- показываем рекламу за вознаграждение с использованием колбека
        gamescore.ads_show_rewarded_video(function(result)
            if result then
                -- подкидываем игроку кристаллов
            end
        end)
    else
        -- ошибка инициализации
    end
end)

API

GameScore JS SDK GameScore Lua API
Инициализация (doc)
window.onGSInit init(callback)
Инициализация модуля
после инициализации будет вызвана функция callback(success) с результатом
Язык (doc)
gs.language language()
Выбранный язык в формате ISO 639-1
gs.changeLanguage(languagecode) changelanguage(languagecode)
Устанавливает язык в формате ISO 639-1
languagecode = string
Приложение (doc)
gs.app app()
Возвращает таблицу с информацией о приложении:
title: Заголовок
description: Описание
image: Изображение
url: URL на платформе
Платформа (doc)
gs.platform platform()
Возвращает таблицу с информацией о платформе:
type: Тип платформы, например YANDEX, VK
hasIntegratedAuth: Возможность авторизации
isExternalLinksAllowed: Возможность размещать внешние ссылки
Константы платформ: PLATFORM_CRAZY_GAMES
PLATFORM_GAME_DISTRIBUTION
PLATFORM_GAME_MONETIZE
PLATFORM_OK
PLATFORM_VK
PLATFORM_YANDEX
gs.getNativeSDK() call_native_sdk(method, parameters, callback)
Вызывает нативный метод для платформы подобнее
method: метод или поле объекта нативной платформы
parameters: параметры вызываемого метода
callback: функция обратного вызова
Разное
gs.isDev is_dev()
В разработке?
gs.isMobile is_mobile()
Мобильное устройство?
gs.serverTime get_server_time()
Возвращает серверное время
--- get_plugin_version()
Возвращает версию плагина
Реклама (doc)
gs.ads ads()
Возвращает таблицу с информацией о менеджере рекламы:
isAdblockEnabled: Включен ли адблок
isStickyAvailable, isFullscreenAvailable, isRewardedAvailable, isPreloaderAvailable: Доступен ли баннер
isStickyPlaying, isFullscreenPlaying, isRewardedPlaying, isPreloaderPlaying: Играет ли сейчас реклама
gs.ads.showFullscreen() ads_show_fullscreen(callback)
Показывает полноэкранную рекламу
callback(result) функция обратного вызова или nil
gs.ads.showPreloader() ads_show_preloader(callback)
Показывает баннерную рекламу (preloader)
callback(result) функция обратного вызова или nil
gs.ads.showRewardedVideo() ads_show_rewarded_video(callback)
Показывает рекламу за вознаграждение
callback(result) функция обратного вызова или nil
gs.ads.showSticky() ads_show_sticky(callback)
Показывает баннер
callback(result) функция обратного вызова или nil
gs.ads.refreshSticky() ads_refresh_sticky(callback)
Принудительное обновление баннера
callback(result) функция обратного вызова или nil
gs.ads.closeSticky() ads_close_sticky(callback)
Закрывает баннер
callback() функция обратного вызова или nil
События:
gs.ads.on('start', () => {}) callbacks.ads_start()
Показ рекламы
gs.ads.on('close', (success) => {}) callbacks.ads_close(success)
Закрытие рекламы
gs.ads.on('fullscreen:start', () => {}) callbacks.ads_fullscreen_start()
Показ полноэкранной рекламы
gs.ads.on('fullscreen:close', (success) => {}) callbacks.ads_fullscreen_close(success)
Закрытие полноэкранной рекламы
gs.ads.on('preloader:start', () => {}) callbacks.ads_preloader_start()
Показ preloader рекламы
gs.ads.on('preloader:close', (success) => {}) callbacks.ads_preloader_close(success)
Закрытие preloader рекламы
gs.ads.on('rewarded:start', () => {}) callbacks.ads_rewarded_start()
Показ рекламы за вознаграждение
gs.ads.on('rewarded:close', (success) => {}) callbacks.ads_rewarded_close(success)
Закрытие рекламы за вознаграждение
gs.ads.on('rewarded:reward', () => {}) callbacks.ads_rewarded_reward()
Получение награды за просмотр рекламы
gs.ads.on('sticky:start', () => {}) callbacks.ads_sticky_start()
Показ sticky баннера
gs.ads.on('sticky:render', () => {}) callbacks.ads_sticky_render()
Рендер sticky баннера
gs.ads.on('sticky:refresh', () => {}) callbacks.ads_sticky_refresh()
Обновление sticky баннера
gs.ads.on('sticky:close', () => {}) callbacks.ads_sticky_close()
Закрытие sticky баннера
Игрок (doc)
gs.player player()
Возвращает таблицу с информацией об игроке:
isLoggedIn: Игрок авторизован
hasAnyCredentials: Игрок использует один из способов входа
id: Идентификатор игрока
score: Очки
name: Имя
avatar: Ссылка на аватар
isStub: Заглушка — пустой ли игрок или данные в нём отличаются умолчательных
fields: Поля игрока (doc)
gs.player.sync()
gs.player.sync({ override: true })
player_sync(parameters, callback)
Синхронизирует игрока
parameters = {override = boolean или nil, silent = boolean или nil} или nil
callback(): функция обратного вызова или nil
gs.player.load() player_load(callback)
Принудительная загрузка игрока, с перезаписью локального
callback(): функция обратного вызова или nil
gs.player.login() player_login(callback)
Вход игрока
callback(result): функция обратного вызова или nil
gs.player.fetchFields() player_fetch_fields(callback)
Получить список полей игрока
callback(): функция обратного вызова или nil
gs.player.get(key) player_get(key)
Получить значение поля key
key = string
gs.player.set(key, value) player_set(key, value)
Установить значение поля key
key = string
value = string, number или boolean
gs.player.add(key, value) player_add(key, value)
Добавить значение к полю key
key = string
value = string, number или boolean
gs.player.toggle(key) player_toggle(key)
Инвертировать состояние поля key
key = string
value = string, number или boolean
gs.player.has(key) player_has(key)
Проверить есть ли поле key и оно не пустое (не 0, '', false, null, undefined)
key = string
gs.player.toJSON() player_to_json()
Возвращает состояние игрока объектом (таблицей)
gs.player.fromJSON() player_from_json(player)
Устанавливает состояние игрока из объекта (таблицы)
player = {key = value, key2 = value2}
gs.player.reset() player_reset()
Сбрасывает состояние игрока на умолчательное
gs.player.remove() player_remove()
Удаляет игрока — сбрасывает поля и очищает ID
gs.player.getField(key) player_get_field(key)
Получить поле по ключу key
key = string
gs.player.getFieldName(key) player_get_field_name(key)
Получить переведенное имя поля по ключу key
key = string
gs.player.getFieldVariantName(key, value) player_get_field_variant_name(key, value)
Получить переведенное имя варианта поля (enum) по ключу key и его значению value
key = string
value = string
События:
gs.player.on('sync', (success) => {}) callbacks.player_sync(success)
Синхронизация игрока
gs.player.on('load', (success) => {}) callbacks.player_load(success)
Загрузка игрока
gs.player.on('login', (success) => {}) callbacks.player_login(success)
Вход игрока
gs.player.on('fetchFields', (success) => {}) callbacks.player_fetch_fields(success)
Получение полей игрока
gs.player.on('change', () => {}) callbacks.player_change()
Изменение полей игрока
Таблица лидеров (doc)
gs.leaderboard.open()
gs.leaderboard.open(parameters)
leaderboard_open(parameters)
Показать таблицу лидеров во внутриигровом оверлее, parameters таблица параметров вывода или nil
gs.leaderboard.fetch()
gs.leaderboard.fetch(parameters)
leaderboard_fetch(parameters, callback)
Получить таблицу лидеров
parameters: таблица параметров вывода или nil
callback(leaders): функция обратного вызова
gs.leaderboard.fetchPlayerRating()
gs.leaderboard.fetchPlayerRating(parameters)
leaderboard_fetch_player_rating(parameters, callback)
Получить рейтинг игрока
parameters: таблица параметров вывода или nil
callback(leaders): функция обратного вызова
Изолированная таблица лидеров (doc)
gs.leaderboard.openScoped(parameters) leaderboard_open_scoped(parameters, callback)
Показать изолированную таблицу лидеров во внутриигровом оверлее, parameters таблица параметров вывода или nil
callback(result): функция обратного вызова
gs.leaderboard.fetchScoped(parameters) leaderboard_fetch_scoped(parameters, callback)
Получить изолированную таблицу лидеров
parameters: таблица параметров вывода или nil
callback(leaders): функция обратного вызова
gs.leaderboard.publishRecord(parameters) leaderboard_publish_record(parameters, callback)
Публикация рекорда игрока в изолированную таблицу
parameters: таблица с параметрами и рекордом для записи
callback(result): функция обратного вызова
gs.leaderboard.fetchPlayerRatingScoped(parameters) leaderboard_fetch_player_rating_scoped(parameters, callback)
Получить рейтинг игрока в изолированной таблице
parameters: таблица параметров вывода
callback(leaders): функция обратного вызова
Достижения (doc)
gs.achievements.unlock(achievement) achievements_unlock(achievement, callback)
Разблокировать достижение
achievement: id или tag достижения
callback(result): функция обратного вызова
gs.achievements.open() achievements_open(callback)
Открыть достижения в оверлее
callback: функция обратного вызова при открытии окна достижений
gs.achievements.fetch() achievements_fetch(callback)
Запросить достижения
callback(achievements): функция обратного вызова
События:
gs.achievements.on('unlock', (achievement) => {}) callbacks.achievements_unlock(achievement)
Разблокировка достижения
gs.achievements.on('error:unlock', (error) => {}) callbacks.achievements_unlock_error(error)
Ошибка разблокировки достижения
gs.achievements.on('open', () => {}) callbacks.achievements_open()
Открытие списка достижений в оверлее
gs.achievements.on('close', () => {}) callbacks.achievements_close()
Закрытие списка достижений
gs.achievements.on('fetch', (result) => {}) callbacks.achievements_fetch(result)
Получение списка достижений
gs.achievements.on('error:fetch', (error) => {}) callbacks.achievements_fetch_error(error)
Ошибка получения списка достижений
Платежи (doc)
gs.payments.isAvailable payments_is_available()
Проверка поддержки платежей на платформе
gs.payments.purchase(product) payments_purchase(product, callback)
Покупка продукта
product = number или string, id или tag продукта
callback(result): функция обратного вызова или nil
gs.payments.consume(product) payments_consume(product, callback)
Использование продукта
product = number или string, id или tag продукта
callback(result): функция обратного вызова или nil
gs.payments.has(product) payments_has(product)
Проверка наличия покупки
product: id или tag продукта
События:
gs.payments.on('purchase', (result) => {}) callbacks.payments_purchase(result)
Покупка продукта
gs.payments.on('error:purchase', (error) => {}) callbacks.payments_purchase_error(error)
Ошибка покупки продукта
gs.payments.on('consume', (result) => {}) callbacks.payments_consume(result)
Использование продукта
gs.payments.on('error:consume', (error) => {}) callbacks.payments_consume_error(error)
Ошибка использования продукта
gs.payments.on('fetchProducts', (result) => {}) callbacks.payments_fetch_products(result)
Получение списка продуктов
gs.payments.on('error:fetchProducts', (error) => {}) callbacks.payments_fetch_products_error(error)
Ошибка получения списка продуктов
Социальные действия (doc)
gs.socials socials()
Возвращает таблицу с информацией о возможных социальных действиях
isSupportsNativeShare: поддерживается ли нативный шаринг
isSupportsNativePosts: поддерживается ли нативный постинг
isSupportsNativeInvite: поддерживаются ли нативные инвайты
canJoinCommunity: можно ли приглашать в сообщество на текущей платформе
isSupportsNativeCommunityJoin: поддерживается ли нативное вступление в сообщество
gs.socials.share(parameters) socials_share(parameters)
Поделиться
parameters: таблица с параметрами или nil
gs.socials.post(parameters) socials_post(parameters)
Опубликовать пост
parameters: таблица с параметрами или nil
gs.socials.invite(parameters) socials_invite(parameters)
Пригласить друзей
parameters: таблица с параметрами или nil
gs.socials.joinCommunity() socials_join_community()
Вступить в сообщество
Игровые переменные (doc)
gs.variables.fetch() game_variables_fetch(callback)
Запросить переменные
callback(): функция обратного вызова или nil
gs.variables.get(variable) game_variables_get(variable)
Получить значение переменной
variable: название запрашиваемой переменной
gs.variables.has(variable) game_variables_has(variable)
Проверить существование переменной
variable: название переменной
gs.variables.type(variable) game_variables_get_type(variable)
Получить тип переменной
variable: название переменной
Константы типов переменной: VARIABLE_DATA или VARIABLE_STRING: строка
VARIABLE_STATS или VARIABLE_NUMBER: число
VARIABLE_FLAG или VARIABLE_BOOLEAN: флаг
VARIABLE_HTML: текст в формате html
VARIABLE_IMAGE: ссылка на изображение
VARIABLE_FILE: ссылка на файл
События:
gs.variables.on('fetch', () => {}) callbacks.game_variables_fetch()
Получение переменных
gs.variables.on('error:fetch', (error) => {}) callbacks.game_variables_fetch_error(error)
Ошибка получения переменных
Подборки игр (doc)
gs.gamesCollections.open(collection) games_collections_open(collection, callback)
Открыть оверлей с играми
collection = number или string, id или tag коллекции или nil
callback(): Функция обратного вызова или nil
gs.gamesCollections.fetch(collection) games_collections_fetch(collection, callback)
Получить коллекцию игр
collection = number или string, id или tag коллекции или nil
callback(result): Функция обратного вызова или nil
События:
gs.gamesCollections.on('open', () => {}) callbacks.games_collections_open()
Открыт оверлей с играми
gs.gamesCollections.on('close', () => {}) callbacks.games_collections_close()
Закрыт оверлей с играми
gs.gamesCollections.on('fetch', (result) => {}) callbacks.games_collections_fetch(result)
Получение коллекции игр
gs.gamesCollections.on('error:fetch', (error) => {}) callbacks.games_collections_fetch_error(error)
Ошибка получения коллекции игр
Изображения (doc)
gs.images.upload(parameters) images_upload(parameters, callback)
Загрузить изображение
parameters: таблица с параметрами
callback(image): функция обратного вызова или nil
gs.images.uploadUrl(parameters) images_upload_url(parameters, callback)
Загрузить изображение по URL
parameters: таблица с параметрами
callback(image): функция обратного вызова или nil
gs.images.chooseFile() images_choice_file(callback)
Выбрать файл
callback(image): функция обратного вызова или nil
gs.images.fetch(parameters) images_fetch(parameters, callback)
Получить изображения<
parameters: таблица с параметрами
callback(image): функция обратного вызова или nil
gs.images.fetchMore(parameters) images_fetch_more(parameters, callback)
Получить еще изображений<
parameters: таблица с параметрами
callback(image): функция обратного вызова или nil
gs.images.resize(url, width, height, crop) images_resize(uri, width, height, crop)
Изменить размер изображения<
uri: адрес изображения
width: требуемая ширина изображения
height: требуемая высота изображения
crop: обрезка изображения
Функция возвращает ссылку на обрезанное изображение.
gs.images.canUpload() images_can_upload()
Проверяет, можно ли загружать изображения
События:
gs.images.on('upload', (image) => {}) callbacks.images_upload(image)
Загрузка изображения
gs.images.on('error:upload', (error) => {}) callbacks.images_upload_error(error)
Ошибка загрузки изображения
gs.images.on('choose', (result) => {}) callbacks.images_choose(result)
Выбор изображения
gs.images.on('error:choose', (error) => {}) callbacks.images_choose_error(error)
Ошибка выбора изображения
gs.images.on('fetch', (result) => {}) callbacks.images_fetch(result)
Получение изображения
gs.images.on('error:fetch', (error) => {}) callbacks.images_fetch_error(error)
Ошибка получения изображения
gs.images.on('fetchMore', (result) => {}) callbacks.images_fetch_more(result)
Получение следующей партии изображений
gs.images.on('error:fetchMore', (error) => {}) callbacks.images_fetch_more_error(error)
Ошибка получения следующей партии изображении
Файлы (doc)
gs.files.upload(parameters) files_upload(parameters, callback)
Загрузить файл
parameters: таблица с параметрами
callback(result): функция обратного вызова или nil
gs.files.uploadUrl(parameters) files_upload_url(parameters, callback)
Загрузить файл по URL
parameters: таблица с параметрами
callback(result): функция обратного вызова или nil
gs.files.uploadContent(parameters) files_upload_content(parameters, callback)
Загрузить контент
parameters: таблица с параметрами
callback(result): функция обратного вызова или nil
gs.files.loadContent(url) files_load_content(url, callback)
Получить контент
url: адрес файла
callback(result): функция обратного вызова или nil
gs.files.chooseFile(accept) files_choose_file(accept, callback)
Выбрать файл
accept: тип файла
callback(result): функция обратного вызова или nil
gs.files.fetch(parameters) files_fetch(parameters, callback)
Получить файлы
parameters: таблица с параметрами
callback(result): функция обратного вызова или nil
gs.files.fetchMore(parameters) files_fetch_more(parameters, callback)
Получить файлы
parameters: таблица с параметрами
callback(result): функция обратного вызова или nil
gs.files.canUpload() files_can_upload()
Проверяет, можно ли загружать файлы
События:
gs.files.on('upload', (result) => {}) callbacks.files_upload(result)
Загрузка файла
gs.files.on('error:upload', (error) => {}) callbacks.files_upload_error(result)
Ошибка загрузки файла
gs.files.on('loadContent', (result) => {}) callbacks.files_load_content(result)
Контент получен
gs.files.on('error:loadContent', (error) => {}) callbacks.files_load_content_error(result)
Ошибка получения контента
gs.files.on('choose', (result) => {}) callbacks.files_choose(result)
Файл выбран
gs.files.on('error:choose', (error) => {}) callbacks.files_choose_error(result)
Ошибка выбора файла
gs.files.on('fetch', (result) => {}) callbacks.files_fetch(result)
Успешное получение файлов
gs.files.on('error:fetch', (error) => {}) callbacks.files_fetch_error(result)
Ошибка при получении файлов
gs.files.on('fetchMore', (result) => {}) callbacks.files_fetch_more(result)
Успешная подгрузка файлов
gs.files.on('error:fetchMore', (error) => {}) callbacks.files_fetch_more_error(result)
Ошибка при подгрузке файлов
Документы (doc)
gs.documents.open(parameters) documents_open(parameters)
Открыть политику конфиденциальности
parameters: таблица с параметрами
gs.documents.fetch(parameters) documents_fetch(parameters, callback)
Получить политику конфиденциальности
parameters: таблица с параметрами
callback(result): функция обратного вызова или nil
События:
gs.documents.on('open', () => {}) callbacks.documents_open()
Открыта политика конфиденциальности
gs.documents.on('close', () => {}) callbacks.documents_close()
Закрыта политика конфиденциальности
gs.documents.on('fetch', (document) => {}) callbacks.documents_fetch(document)
Получение политики конфиденциальности
gs.documents.on('error:fetch', (error) => {}) callbacks.documents_fetch_error(error)
Ошибка получения политики конфиденциальности
Аналитика (doc)
gs.analytics.hit(url) analytics_hit(url)
Посещение или просмотр страницы
gs.analytics.goal(event, value) analytics_goal(event, value)
Отправка достижения цели
Полный экран (doc)
gs.fullscreen.open() fullscreen_open()
Войти в полноэкранный режим
gs.fullscreen.close() fullscreen_close()
Выйти из полноэкранного режима
gs.fullscreen.toggle() fullscreen_toggle()
Переключить полноэкранный режим
События:
gs.fullscreen.on('open', () => {}) callbacks.fullscreen_open()
Вход в полноэкранный режим
gs.fullscreen.on('close', () => {}) callbacks.fullscreen_close()
Выход из полноэкранного режима
gs.fullscreen.on('change', () => {}) callbacks.fullscreen_change()
Переключение полноэкранного режима

Вызов нативных методов платформы

Для вызова нативного метода, получения объекта или поля предназначена функция call_native_sdk(method, parameters, callback).

  • method: строка, путь до метода, объекта или поля разделенного точками. Если указан путь до объекта или поля объекта, то parameters и callback будет проигнорирован.
  • parameters: параметр вызываемого метода (string, number, boolean, table). Если необходимо передать несколько параметров, то параметры необходимо поместить в массив (таблицу). Порядок параметров определяется индексом массива. Не поддерживается передача функций в качестве параметров!
  • callback: функция обратного вызова, необходимо указывать, если нативный метод возвращает промис. Если callback == nil, то функция возвращает результат, иначе nil.

Результат возвращаемый функцией формируется по правилам:

  1. Параметр method ссылается на объект или поле объекта:
  • Если результат string, number или boolean то возвращается таблица с результатом {value = result}.
  • Если результат object, то возвращается таблица.
  • В случае если произошло исключение, то данные об ошибке возвращаются в виде таблицы {error = "error description"}.
  1. Параметр method ссылается на функцию:
  • Если результат string, number, boolean, то возвращается таблица с результатом {value = result}.
  • Если результат object, то возвращается таблица.
  • В случае если произошло исключение, или промис завершился ошибкой, то данные об ошибке возвращаются в виде таблицы {error = "error description"}.

callback(result): result - результат выполнения промиса, если промис завершился ошибкой, то result = {error = "error description"}.

Расширенные действия с промисами

Бывают ситуации, когда промис возвращает объект с функциями, которые может потребоваться выполнить позже. Для этих ситуаций предусмотрен механизм сохранения объекта на уровне JS и дальнейшего его использования при следующих вызовах API.

В этих случаях формат параметра method для функции call_native_sdk может примнимать вид:

  • var=path1.path2.path3: объект path1.path2.path3 будет сохранен в переменную var
  • var:method: вызов метода из ранее сохраненного объекта
  • var2=var:method2: вызов метода (необходимо что-бы он был промисом) из ранее сохраненного объекта и сохранение результата в переменной var2

Примеры различных вариантов вызова

Запрос к СДК Тип Вызов функции и результат
environment object call_native_sdk("environment")
table
environment.i18n.lang string call_native_sdk("environment.i18n.lang")
{value = string}
env undefined call_native_sdk("env")
{error = 'Field or function "env" not found!'}
player.getUniqueID() function call_native_sdk("player.getUniqueID")
{value = string}
feedback.canReview() function call_native_sdk("feedback.canReview", nil, callback)
nil
После завершения промиса будет вызван callback.
getLeaderboards().then(lb => {}) function call_native_sdk("lb=getLeaderboards", nil, callback)
nil
После завершения промиса будет вызван callback.
Результат будет сохранен в переменной JS.
lb.setLeaderboardScore() function call_native_sdk("lb=setLeaderboardScore")
После завершения промиса будет вызван callback.
При вызове функции будет обращение к ранее сохраненной переменной JS, если она не найдена функция вернет {error = "The 'lb' object has not been previously saved!"}

Пример нативной работы с платформой Yandex:

local gamescore = require("gamescore.gamescore")

gamescore.init(function(result)
    if result then
        -- Получить переменные окружения Яндекса, эквивалент ysdk.environment
        local environment = gamescore.call_native_sdk("environment")

        -- Получить язык интерфейса Яндекс.Игр в формате ISO 639-1, эквивалент ysdk.environment.i18n.lang
        local language = gamescore.call_native_sdk("environment.i18n.lang")

        -- Получить таблицы лидеров, эквивалент ysdk.getLeaderboards()
        -- промис возвращает объект, сохраним его в переменную lb
        gamescore.call_native_sdk("lb=getLeaderboards", nil, function(leaderboards)
            pprint(leaderboards)
            -- Запись нового рекорда, эквивалент lb.setLeaderboardScore('leaderboard2021', 120);
            -- будем обращаться к переменной lb
            gamescore.call_native_sdk("lb:setLeaderboardScore", { "leaderboard2021", 120 })
            -- Получить данные таблицы лидеров, эквивалент lb.getLeaderboardEntries('leaderboard2021')
            gamescore.call_native_sdk("lb:getLeaderboardEntries", "leaderboard2021", nil, function(result)
                pprint(result)
            end)

            -- Получить данные таблицы лидеров с параметрами
            -- эквивалент lb.getLeaderboardEntries('leaderboard2021', {quantityTop: 10, includeUser: true, quantityAround: 3})
            local parameters = {
                "leaderboard2021",
                { quantityTop = 10, includeUser = true, quantityAround = 3 }
            }
            gamescore.call_native_sdk("lb:getLeaderboardEntries", parameters, function(result)
                pprint(result)
            end)
        end)
    end
end)

Представленный выше код эквивалентен коду JS:

YaGames
    .init()
    .then(ysdk => {
        // Получить переменные окружения Яндекса
        let environment = ysdk.environment;

        // Получить язык интерфейса Яндекс.Игр в формате ISO 639-1
        let language = ysdk.environment.i18n.lang;

        // Получить таблицы лидеров
        ysdk.getLeaderboards().then(function (lb) {
            console.log(lb);
            // Запись нового рекорда
            lb.setLeaderboardScore('leaderboard2021', 120);
            // Получить данные таблицы лидеров
            lb.getLeaderboardEntries('leaderboard2021').then(function (result) {
                console.log(result);
            });

            // Получить данные таблицы лидеров с параметрами
            let parameters = {quantityTop: 10, includeUser: true, quantityAround: 3};
            lb.getLeaderboardEntries('leaderboard2021', parameters).then(function (result) {
                console.log(result);
            });
        });
    });

Заглушка для других платформ, отличных от html

Для платформ отличных от html предусмотрены заглушки для удобства отладки.

При использовании функций:

  • player_get(key)
  • player_set(key, value)
  • player_add(key, value)
  • player_toggle(key)
  • player_has(key)
  • player_to_json()
  • player_from_json(player)

данные будут сохраняться/считываться с помощью sys.save()/sys.load() локально в/из файла "gamescore.dat" (можно поменять)

local mock_api = require("gamescore.mock_api")

-- установим имя для файла локального хранилища данных
mock_api.file_storage = "my_storage.dat"

-- установка параметров "заглушек"
mock_api.player.name = "my player name"
mock_api.player.id = 625

-- или так
mock_api.player = function()
    return {
        isLoggedIn = false,
        hasAnyCredentials = false,
        id = 234,
        score = 500,
        name = "player name",
        avatar = "avatar",
        isStub = true,
        fields = mock_api.fields_data
    }
end

Каждая функция-заглушка GameScore API может быть представлена таблицей данных или функцией выполняющее действие и/или возвращающая данные. Любые функции/данные можно переопределять для удобства работы/отладки.

Заглушка для нативных вызовов

Заглушки для нативных вызовов выделены в отдельный модуль, чтобы его подключить используйте функцию set_native_api

--native_api.lua
local M = {}

M["environment"] = {
    app = {
        id = "app_id"
    },
    browser = {
        lang = "ru"
    },
    i18n = {
        lang = "ru",
        tld = "ru"
    }
}

return M
local mock = require("gamescore.mock")
local native_api = require("native_api")
local gamescore = require("gamescore.gamescore")

-- Устанавливаем заглушку для нативных функций
mock.set_native_api(native_api)
-- Обращаемся к нативной функции
local result = gamescore.call_native_sdk("environment")
pprint(result)