Godot 3.x #
Подключение #
Скачайте актуальный архив instant_games_bridge.zip
со страницы релизов на гитхаб, разархивируйте его и положите содержимое в res://addons
:
![](/images/godot/1.png)
Включите плагин в настройках проекта:
![](/images/godot/2.png)
Инициализация #
Когда игра загружена — плагин уже проинициализирован. Ничего дополнительно делать не нужно.
Сборка #
Для корректной работы плагина необходимо выбрать соответствующий HTML-шаблон. Укажите в настройках экспорта в пункте Custom HTML Shell
:
res://addons/instant_games_bridge/template/index.html
![](/images/godot/3.png)
Информация о платформе #
ID платформы #
Bridge.platform.id
Возвращает ID платформы, на которой запущена игра в данный момент.
Возможные значения: playgama
, vk
, ok
, yandex
, crazy_games
, absolute_games
, game_distribution
, vk_play
, mock
.
Язык #
Bridge.platform.language
Если платформа предоставляет данные об языке пользователя — то это будет язык, который установлен у пользователя на платформе.
Если не предоставляет — это будет язык браузера пользователя.
Формат: ISO 639-1. Пример: ru
, en
.
Параметр из адресной строки #
Bridge.platform.payload
С помощью данного параметра можно в ссылку на игру встраивать какую-либо вспомогательную информацию.
Платформа | Формат ссылки |
---|---|
Playgama | — |
VK | vk.com/app8056947#your-info |
OK | — |
Yandex | yandex.com/games/play/183100?payload=your-info |
Crazy Games | crazygames.com/game/example?payload=your-info |
Absolute Games | — |
Game Distribution | — |
VK Play | — |
Mock | site.com/game?payload=your-info |
Информация о домене #
Bridge.platform.tld
Платформа | Возможные значения |
---|---|
Playgama |
null |
VK |
null |
OK |
null |
Yandex | com , ru , etc. |
Crazy Games |
null |
Absolute Games |
null |
Game Distribution |
null |
VK Play |
null |
Mock |
null |
Отправка сообщения платформе #
Bridge.platform.send_message("game_ready")
# Для удобства можно использовать константы
Bridge.platform.send_message(Bridge.PlatformMessage.GAME_READY)
Сообщение | Описание | Где поддерживается |
---|---|---|
game_ready |
Игра загрузилась, все загрузочные экраны прошли, игрок может взаимодействовать с игрой. | yandex |
in_game_loading_started |
Началась какая-либо загрузка внутри игры. Например, когда идёт загрузка уровня. | crazy_games |
in_game_loading_stopped |
Загрузка внутри игры окончена. | crazy_games |
gameplay_started |
Начался геймплей. Например, игрок зашёл в уровень с главного меню. | crazy_games |
gameplay_stopped |
Геймплей закончился/приостановился. Например, при выходе с уровня в главное меню, открытии меню паузы и т.д. | crazy_games |
player_got_achievement |
Игрок достиг особенного момента. Например, победил босса, установил рекорд и т.д. | crazy_games |
Информация о девайсе #
Тип девайса #
Bridge.device.type
Возвращает тип девайса, с которого пользователь запустил игру.
Возможные значения: mobile
, tablet
, desktop
, tv
.
Информация об игроке #
Поддержка авторизации #
Bridge.player.is_authorization_supported
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
true |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
true |
Game Distribution |
false |
VK Play |
true |
Mock |
false |
Авторизован ли игрок в данный момент #
Bridge.player.is_authorized
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
true |
Yandex |
true /
false |
Crazy Games |
false |
Absolute Games |
true /
false |
Game Distribution |
false |
VK Play |
true /
false |
Mock |
false |
ID игрока #
Bridge.player.id
Если авторизация поддерживается на платформе и игрок авторизован в данный момент – возвращает его ID на платформе, иначе —
null
.
Имя игрока #
Bridge.player.name
Платформа | Возможные значения |
---|---|
Playgama |
null |
VK | Имя игрока |
OK | Имя игрока |
Yandex | Если игрок авторизован и дал игре доступ к личной информации — имя игрока, иначе —
null |
Crazy Games |
null |
Absolute Games | Если игрок авторизован — имя игрока, иначе —
null |
Game Distribution |
null |
VK Play | Если игрок авторизован — имя игрока, иначе —
null |
Mock |
null |
Аватар игрока #
Bridge.player.photos
Массив аватаров игрока, упорядоченный по возрастанию разрешения.
Платформа | Возможные значения |
---|---|
Playgama | Пустой массив |
VK | Массив ссылок на изображения |
OK | Массив ссылок на изображения |
Yandex | Если игрок авторизован и дал игре доступ к личной информации — массив ссылок на изображения, иначе — пустой массив |
Crazy Games | Пустой массив |
Absolute Games | Если игрок авторизован — массив ссылок на изображения, иначе — пустой массив |
Game Distribution | Пустой массив |
VK Play | Если игрок авторизован — массив ссылок на изображения, иначе — пустой массив |
Mock | Пустой массив |
Авторизация игрока #
func _ready():
var options
match Bridge.platform.id:
"yandex":
options = {
"scopes": true
}
Bridge.player.authorize(options, funcref(self, "_on_player_authorize_completed"))
func _on_player_authorize_completed(success):
if success:
print("Authorized")
else:
print("Authorization error")
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
true |
Yandex | Если игрок уже авторизован —
true . Если не авторизован — показывается диалоговое окно авторизации. Далее
true /
false зависит от того авторизуется игрок или нет. |
Crazy Games |
false |
Absolute Games | Если игрок уже авторизован или открылось окно авторизации —
true . После авторизации происходит перезагрузка страницы.
false в случае ошибки. |
Game Distribution |
false |
VK Play | Если игрок авторизован —
true . Если игрок авторизуется —
true (после этого произойдёт перезагрузка страницы).
false в случае ошибки. |
Mock |
false |
Информация об игре #
Текущее состояние видимости #
Bridge.game.visibility_state
Возвращает текущее состояние видимости игры (вкладки с игрой).
Возможные значения: visible
, hidden
.
# Отслеживать изменение состояния можно подключившись к сигналу
func _ready():
Bridge.game.connect("visibility_state_changed", self, "_on_visibility_state_changed")
func _on_visibility_state_changed(state):
print(state)
📝 Примечание
Нужно реагировать на изменение состояния рекламы. Например, выключать звук в игре при opened и включать приclosed
иfailed
.
Пользовательские данные #
Есть два типа хранилища: локальное local_storage
и внутреннее platform_internal
.
При записи в локальное — данные сохраняются у игрока на конкретном девайсе, при записи во внутреннее — данные сохраняются на серверах платформы.
Тип хранилища по умолчанию #
Bridge.storage.default_type
Используется автоматически, если при работе с данными не указывать конкретный тип.
Платформа | Возможные значения |
---|---|
Playgama | local_storage |
VK | platform_internal |
OK | Если игрок дал доступ — platform_internal , если нет — local_storage |
Yandex | Если игрок авторизован — platform_internal , если нет — local_storage |
Crazy Games | local_storage |
Absolute Games | Если игрок авторизован — platform_internal , если нет — local_storage |
Game Distribution | local_storage |
VK Play | local_storage |
Mock | local_storage |
Проверка на поддержку #
Bridge.storage.is_supported("local_storage")
Bridge.storage.is_supported("platform_internal")
# Для удобства можно использовать константы
Bridge.storage.is_supported(Bridge.StorageType.LOCAL_STORAGE)
Bridge.storage.is_supported(Bridge.StorageType.PLATFORM_INTERNAL)
Платформа | local_storage | platform_internal |
---|---|---|
Playgama |
true |
false |
VK |
true |
true |
OK |
true |
true |
Yandex |
true |
true |
Crazy Games |
true |
false |
Absolute Games |
true |
true |
Game Distribution |
true |
false |
VK Play |
true |
false |
Mock |
true |
false |
Проверка на доступность #
Bridge.storage.is_available("local_storage")
Bridge.storage.is_available("platform_internal")
# Для удобства можно использовать константы
Bridge.storage.is_available(Bridge.StorageType.LOCAL_STORAGE)
Bridge.storage.is_available(Bridge.StorageType.PLATFORM_INTERNAL)
Платформа | local_storage | platform_internal |
---|---|---|
Playgama |
true |
false |
VK |
true |
true |
OK |
true |
Если игрок дал доступ —
true , если нет —
false |
Yandex |
true |
Если игрок авторизован —
true , если нет —
false |
Crazy Games |
true |
false |
Absolute Games |
true |
Если игрок авторизован —
true , если нет —
false |
Game Distribution |
true |
false |
VK Play |
true |
false |
Mock |
true |
false |
Загрузка данных #
# Загрузить данные по ключу
func _ready():
Bridge.storage.get("level", funcref(self, "_on_storage_get_completed"))
func _on_storage_get_completed(success, data):
if success:
if data != null:
print(data)
else:
# Данных по ключу level нет
print("Data is null")
# Загрузить данные сразу по нескольким ключам
func _ready():
Bridge.storage.get(["level", "coins"], funcref(self, "_on_storage_get_completed"))
func _on_storage_get_completed(success, data):
if success:
if data[0] != null:
print("Level: ", data[0])
else:
# Данных по ключу level нет
print("Level is null")
if data[1] != null:
print("Coins: ", data[1])
else:
# Данных по ключу coins нет
print("Coins is null")
# Загрузить данные из конкретного хранилища
Bridge.storage.get("level", funcref(self, "_on_storage_get_completed"), Bridge.StorageType.LOCAL_STORAGE)
Сохранение данных #
# Сохранить данные по ключу
func _ready():
Bridge.storage.set("level", "dungeon_123", funcref(self, "_on_storage_set_completed"))
func _on_storage_set_completed(success):
print("On Storage Set Completed, success: ", success)
# Сохранить данные по нескольким ключам
Bridge.storage.set(["level", "is_tutorial_completed", "coins"], ["dungeon_123", true, 42], funcref(self, "_on_storage_set_completed"))
# Сохранить данные в конкретное хранилище
Bridge.storage.set("level", "dungeon_123", funcref(self, "_on_storage_set_completed"), Bridge.StorageType.LOCAL_STORAGE)
Удаление данных #
# Удалить данные по ключу
func _ready():
Bridge.storage.delete("level", funcref(self, "_on_storage_delete_completed"))
func _on_storage_delete_completed(success):
print("On Storage Delete Completed, success: ", success)
# Удалить данные по нескольким ключам
Bridge.storage.delete(["level", "is_tutorial_completed", "coins"], funcref(self, "_on_storage_delete_completed"))
# Удалить данные из конкретного хранилища
Bridge.storage.delete("level", funcref(self, "_on_storage_delete_completed"), Bridge.StorageType.LOCAL_STORAGE)
Если при работе с данными не передавать третьим аргументом тип хранилища, то используется тип хранилища по умолчанию (Bridge.storage.default_type
).
Реклама #
Banner #
Поддерживается ли баннер #
Bridge.advertisement.is_banner_supported
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
true |
Yandex |
true |
Crazy Games |
true |
Absolute Games |
false |
Game Distribution |
true |
VK Play |
false |
Mock |
false |
📝 Примечание
Чтобы баннеры работали в Yandex — необходимо их включить в настройках игры.
📝 Примечание
Чтобы баннеры работали в Crazy Games — необходимо вindex.html
добавить контейнер<div>
нужных размеров. Подробнее про размеры: https://docs.crazygames.com/sdk/html5/#responsive-banners.
📝 Примечание
Чтобы баннеры работали в Game Distribution — необходимо вindex.html
добавить контейнер<div>
нужных размеров. Подробнее про размеры: https://github.com/GameDistribution/GD-HTML5/wiki/Display-Ads.
Показать баннер #
var options
match Bridge.platform.id:
"vk":
options = {
"position": "bottom",
"layoutType": "resize",
"canClose": false,
}
"crazy_games":
options = {
"containerId": "div-container-id"
}
"game_distribution":
options = {
"containerId": "div-container-id"
}
Bridge.advertisement.show_banner(options)
Скрыть баннер #
Bridge.advertisement.hide_banner()
Состояние баннера #
Bridge.advertisement.banner_state
Текущее состояние баннера. Возможные значения: loading
, shown
, hidden
, failed
.
# Отслеживать изменение состояния можно подключившись к сигналу
func _ready():
Bridge.advertisement.connect("banner_state_changed", self, "_on_banner_state_changed")
func _on_banner_state_changed(state):
print(state)
Interstitial #
Межстраничная реклама. Обычно показывается в момент загрузки уровня/поражения и т.д.
Минимальный интервал между показами #
# Значение по умолчанию = 60 секунд
Bridge.advertisement.minimum_delay_between_interstitial
Между показами Interstitial-рекламы нужно соблюдать временные интервалы. Например, Yandex просто не покажет рекламу если вызывать слишком часто, а VK будет показывать так часто, как вызывается метод.
Для удобства, в данном SDK есть встроенный механизм таймера между показами. Вам нужно лишь указать нужный интервал и можно дёргать метод показа рекламы сколько угодно. По умолчанию интервал = 60 секунд.
Bridge.advertisement.set_minimum_delay_between_interstitial(30)
Состояние рекламы #
Bridge.advertisement.interstitial_state
Текущее состояние рекламы. Возможные значения: loading
, opened
, closed
, failed
.
# Отслеживать изменение состояния можно подключившись к сигналу
func _ready():
Bridge.advertisement.connect("interstitial_state_changed", self, "_on_interstitial_state_changed")
func _on_interstitial_state_changed(state):
print(state)
📝 Примечание
Нужно реагировать на изменение состояния рекламы. Например, выключать звук в игре приopened
и включать приclosed
иfailed
.
Показать рекламу #
Bridge.advertisement.show_interstitial()
Rewarded #
Реклама за вознаграждение.
Состояние рекламы #
Bridge.advertisement.rewarded_state
Текущее состояние рекламы. Возможные значения: loading
, opened
, closed
, rewarded
, failed
.
# Отслеживать изменение состояния можно подключившись к сигналу
func _ready():
Bridge.advertisement.connect("rewarded_state_changed", self, "_on_rewarded_state_changed")
func _on_rewarded_state_changed(state):
print(state)
📝 Примечание
Нужно реагировать на изменение состояния рекламы. Например, выключать звук в игре приopened
и включать приclosed
иfailed
.
⚠️ Предупреждение
Награду игроку нужно выдавать только при наступлении состоянияrewarded
.
Показать рекламу #
Bridge.advertisement.show_rewarded()
Социальные взаимодействия #
Поделиться #
Bridge.social.is_share_supported
Поддерживается ли функционал на платформе.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
false |
Yandex |
false |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"vk":
options = {
"link": "https://vk.com/mewton.games"
}
Bridge.social.share(options, funcref(self, "_on_share_completed"))
func _on_share_completed(success):
print(success)
Вступить в сообщество #
Bridge.social.is_join_community_supported
Поддерживается ли функционал на платформе.
Платформа | Возможные значения |
---|---|
Playgame |
false |
VK |
true |
OK |
true |
Yandex |
false |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"vk":
options = {
"groupId": 199747461
}
"ok":
options = {
"groupId": 62984239710374
}
Bridge.social.join_community(options, funcref(self, "_on_join_community_completed"))
func _on_join_community_completed(success):
print(success)
Пригласить друзей #
Bridge.social.is_invite_friends_supported
Поддерживается ли функционал на платформе.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
true |
Yandex |
false |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"ok":
options = {
"text": "Hello World!"
}
Bridge.social.invite_friends(options, funcref(self, "_on_invite_friends_completed"))
func _on_invite_friends_completed(success):
print(success)
Опубликовать пост #
Bridge.social.is_create_post_supported
Поддерживается ли функционал на платформе.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
true |
Yandex |
false |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"vk":
options = {
"message": "Hello world!",
"attachments": "photo-199747461_457239629"
}
"ok":
options = {
"media":[
{
"type": "text",
"text": "Here you can see odnoklassniki API docs(click the link)"
},
{
"type": "link",
"url": "https://apiok.ru"
},
{
"type": "poll",
"question": "Do you like our API?",
"answers": [
{ "text": "Yes" },
{ "text": "No" }
],
"options": "SingleChoice,AnonymousVoting"
}
]
}
Bridge.social.create_post(options, funcref(self, "_on_create_post_completed"))
func _on_create_post_completed(success):
print(success)
Добавить в избранное #
Bridge.social.is_add_to_favorites_supported
Поддерживается ли функционал на платформе.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
false |
Yandex |
false |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
Bridge.social.add_to_favorites(funcref(self, "_on_add_to_favorites_completed"))
func _on_add_to_favorites_completed(success):
print(success)
Добавить на рабочий стол #
Bridge.social.is_add_to_home_screen_supported
Поддерживается ли функционал на платформе.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK | Android:
true .Desktop, iOS: false . |
OK |
false |
Yandex |
true /
false Доступность опции зависит от девайса игрока, внутренних правил браузера и ограничений платформы. |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
Bridge.social.add_to_home_screen(funcref(self, "_on_add_to_home_screen_completed"))
func _on_add_to_home_screen_completed(success):
print(success)
Оценить игру #
Bridge.social.is_rate_supported
Поддерживается ли функционал на платформе.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
false |
OK |
true |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
Bridge.social.rate(funcref(self, "_on_rate_completed"))
func _on_rate_completed(success):
print(success)
Внешние ссылки #
Bridge.social.is_external_links_allowed
Разрешены ли внешние ссылки на платформе.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true |
OK |
false |
Yandex |
false |
Crazy Games |
true |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
Лидерборды #
Поддержка #
Bridge.leaderboard.is_supported
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
true* |
OK |
false |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
⚠️ Предупреждение
* В VK с клиента можно только показать нативный popup, для всего остального потребуется свой сервер.
Нативный popup #
Bridge.leaderboard.is_native_popup_supported
Поддерживается ли нативный popup.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK | Android, iOS, Mobile Web:
true Desktop: false |
OK |
false |
Yandex |
false |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"vk":
options = {
"userResult": 42,
"global": true
}
Bridge.leaderboard.show_native_popup(options, funcref(self, "_on_show_native_popup_completed"))
func _on_show_native_popup_completed(success):
print(success)
Очки игрока #
Запись #
Bridge.leaderboard.is_set_score_supported
Поддерживается ли запись очков игрока.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
false |
OK |
false |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"yandex":
options = {
"leaderboardName": "leaderboard_name",
"score": 42
}
Bridge.leaderboard.set_score(options, funcref(self, "_on_set_score_completed"))
func _on_set_score_completed(success):
print(success)
Чтение #
Bridge.leaderboard.is_get_score_supported
Поддерживается ли чтение очков игрока.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
false |
OK |
false |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"yandex":
options = {
"leaderboardName": "leaderboard_name"
}
Bridge.leaderboard.get_score(options, funcref(self, "_on_get_score_completed"))
func _on_get_score_completed(success, score):
print(success)
print(score)
Записи таблицы #
Bridge.leaderboard.is_get_entries_supported
Поддерживается ли чтение полной таблицы.
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
false |
OK |
false |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
func _ready():
var options
match Bridge.platform.id:
"yandex":
options = {
"leaderboardName": "leaderboard_name",
"includeUser": true,
"quantityAround": 10,
"quantityTop": 10
}
Bridge.leaderboard.get_entries(options , funcref(self, "_on_get_entries_completed"))
func _on_get_entries_completed(success, entries):
print(success)
print(entries)
Внутриигровые покупки #
Существуют два типа покупок — постоянные (например, отключение рекламы) и расходуемые (например, внутриигровые монеты).
Поддержка #
Bridge.payments.is_supported
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
false |
OK |
false |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
Покупка #
func _ready():
var options
match Bridge.platform.id:
"yandex":
options = {
"id": "PURCHASE_ID"
}
Bridge.payments.purchase(options, funcref(self, "_on_purchase_completed"))
func _on_purchase_completed(success):
print(success)
Расходование #
func _ready():
var options
match Bridge.platform.id:
"yandex":
options = {
"purchaseToken": "PURCHASE_TOKEN"
}
Bridge.payments.consume(options, funcref(self, "_on_consume_completed"))
func _on_consume_completed(success):
print(success)
Каталог всех товаров #
func _ready():
Bridge.payments.get_catalog(funcref(self, "_on_get_catalog_completed"))
func _on_get_catalog_completed(success, catalog):
print(success)
for i in range(catalog.length):
var catalog_item = catalog[i]
print(catalog_item.id)
print(catalog_item.title)
print(catalog_item.description)
print(catalog_item.icon)
print(catalog_item.price_value)
print(catalog_item.price_currency_code)
Список купленных товаров #
func _ready():
Bridge.payments.get_purchases(funcref(self, "_on_get_purchases_completed"))
func _on_get_purchases_completed(success, purchases):
print(success)
for i in range(purchases.length):
var purchase = purchases[i]
print(purchases.id)
print(purchases.token)
Удаленная конфигурация #
С помощью удаленной конфигурации вы можете управлять настройками вашей игры не выпуская обновлений.
Поддержка #
Bridge.remote_config.is_supported
Платформа | Возможные значения |
---|---|
Playgama |
false |
VK |
false |
OK |
false |
Yandex |
true |
Crazy Games |
false |
Absolute Games |
false |
Game Distribution |
false |
VK Play |
false |
Mock |
false |
Загрузка значений #
func _ready():
var options
match Bridge.platform.id:
"yandex":
options = {
"clientFeatures": [
{ "name": "player_coins", "value": "42" },
{ "name": "player_level", "value": "dungeon_123" },
]
}
Bridge.remote_config.get(options, funcref(self, "_on_remote_config_get_completed"))
func _on_remote_config_get_completed(success, data):
print(success)
print(data)