Use this skill when working with Playgama Bridge SDK for Godot games. Activates for game development involving cross-platform publishing, advertisements, in-app purchases, leaderboards, or social features using Playgama Bridge in Godot/GDScript.
Provides Playgama Bridge SDK integration for Godot HTML5 games. Activates when developing cross-platform games with ads, IAPs, leaderboards, or social features.
/plugin marketplace add Playgama/bridge-claude-plugins/plugin install playgama-bridge-godot@playgama-bridge-claude-pluginsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Playgama Bridge is a cross-platform SDK for publishing Godot HTML5 games across 20+ platforms including Playgama, YouTube, Yandex Games, Crazy Games, Poki, Facebook, Telegram, Xiaomi, and more.
playgama_bridge.zip from GitHub releasesres://addons/ directoryEdit addons/playgama_bridge/template/playgama-bridge-config.json for game settings (identifiers, in-app purchases, leaderboards).
When exporting to HTML5, set Custom HTML Shell to: res://addons/playgama_bridge/template/index.html
The SDK initializes automatically. Access all modules through the Bridge singleton:
Bridge.platform
Bridge.player
Bridge.device
Bridge.storage
Bridge.advertisement
Bridge.payments
Bridge.leaderboards
Bridge.social
Bridge.achievements
After game is fully loaded:
Bridge.platform.send_message("game_ready")
# Device type: 'mobile', 'tablet', 'desktop', 'tv'
Bridge.device.type
# Platform ID: 'playgama', 'vk', 'yandex', 'crazy_games', etc.
Bridge.platform.id
# User language (ISO 639-1)
Bridge.platform.language # 'en', 'ru', etc.
# Top-level domain
Bridge.platform.tld # 'com', 'ru', null
# URL payload
Bridge.platform.payload
# Audio state
Bridge.platform.is_audio_enabled
# Server time (Godot 4)
func _ready():
Bridge.platform.get_server_time(Callable(self, "_on_get_server_time_completed"))
# Server time (Godot 3)
func _ready():
Bridge.platform.get_server_time(funcref(self, "_on_get_server_time_completed"))
func _on_get_server_time_completed(success, time):
if success:
print("Server time: ", time)
Bridge.platform.send_message("game_ready")
Bridge.platform.send_message("gameplay_started")
Bridge.platform.send_message("gameplay_stopped")
Bridge.platform.send_message("in_game_loading_started")
Bridge.platform.send_message("in_game_loading_stopped")
Bridge.platform.send_message("player_got_achievement")
func _ready():
Bridge.platform.connect("audio_state_changed", Callable(self, "_on_audio_changed"))
Bridge.platform.connect("pause_state_changed", Callable(self, "_on_pause_changed"))
func _on_audio_changed(is_enabled):
# Mute/unmute game audio
AudioServer.set_bus_mute(0, not is_enabled)
func _on_pause_changed(is_paused):
get_tree().paused = is_paused
func _ready():
Bridge.platform.connect("audio_state_changed", self, "_on_audio_changed")
Bridge.platform.connect("pause_state_changed", self, "_on_pause_changed")
# Player ID (null if not authorized)
Bridge.player.id
# Player name (null if unavailable)
Bridge.player.name
# Player photos (array of URLs sorted by resolution)
Bridge.player.photos
# Platform-specific player data
Bridge.player.extra
# Check authorization support
Bridge.player.is_authorization_supported
# Check if authorized
Bridge.player.is_authorized
func _ready():
var options = {}
Bridge.player.authorize(options, Callable(self, "_on_authorize"))
func _on_authorize(success):
if success:
print("Authorized: ", Bridge.player.id)
else:
print("Authorization failed")
func _ready():
var options = {}
Bridge.player.authorize(options, funcref(self, "_on_authorize"))
func _on_authorize(success):
if success:
print("Authorized")
func _ready():
# Single value
Bridge.storage.get("level", Callable(self, "_on_get"))
# Multiple values
Bridge.storage.get(["level", "coins"], Callable(self, "_on_get"))
func _on_get(success, data):
if success and data != null:
print("Data: ", data)
func _ready():
# Single value
Bridge.storage.set("level", "dungeon_123", Callable(self, "_on_set"))
# Multiple values
Bridge.storage.set(["level", "coins"], ["dungeon_123", 42], Callable(self, "_on_set"))
func _on_set(success):
print("Save success: ", success)
func _ready():
Bridge.storage.delete("level", Callable(self, "_on_delete"))
Bridge.storage.delete(["level", "coins"], Callable(self, "_on_delete"))
func _on_delete(success):
print("Delete success: ", success)
func _ready():
Bridge.storage.get("level", funcref(self, "_on_get"))
Bridge.storage.set("level", "value", funcref(self, "_on_set"))
Bridge.storage.delete("level", funcref(self, "_on_delete"))
# Check support
Bridge.advertisement.is_banner_supported
# Show banner
var position = Bridge.BannerPosition.BOTTOM # TOP or BOTTOM
var placement = "menu" # optional
Bridge.advertisement.show_banner(position, placement)
# Hide banner
Bridge.advertisement.hide_banner()
func _ready():
Bridge.advertisement.connect("banner_state_changed", Callable(self, "_on_banner_state_changed"))
func _on_banner_state_changed(state):
# States: 'loading', 'shown', 'hidden', 'failed'
print("Banner: ", state)
func _ready():
Bridge.advertisement.connect("banner_state_changed", self, "_on_banner_state_changed")
# Check support
Bridge.advertisement.is_interstitial_supported
# Set minimum delay between ads (default: 60 seconds)
Bridge.advertisement.set_minimum_delay_between_interstitial(30)
# Show interstitial
var placement = "level_complete" # optional
Bridge.advertisement.show_interstitial(placement)
func _ready():
Bridge.advertisement.connect("interstitial_state_changed", Callable(self, "_on_interstitial_state_changed"))
func _on_interstitial_state_changed(state):
# States: 'loading', 'opened', 'closed', 'failed'
match state:
"opened":
# Your logic
pass
"closed", "failed":
# Your logic
pass
func _ready():
Bridge.advertisement.connect("interstitial_state_changed", self, "_on_interstitial_state_changed")
# Check support
Bridge.advertisement.is_rewarded_supported
# Current state and placement
Bridge.advertisement.rewarded_state
Bridge.advertisement.rewarded_placement
# Show rewarded ad
var placement = "double_coins" # optional
Bridge.advertisement.show_rewarded(placement)
func _ready():
Bridge.advertisement.connect("rewarded_state_changed", Callable(self, "_on_rewarded_state_changed"))
func _on_rewarded_state_changed(state):
# States: 'loading', 'opened', 'closed', 'rewarded', 'failed'
match state:
"opened":
# Your logic
pass
"rewarded":
# Grant reward to player
pass
"closed", "failed":
# Your logic
pass
func _ready():
Bridge.advertisement.connect("rewarded_state_changed", self, "_on_rewarded_state_changed")
# Check support
Bridge.payments.is_supported
func _ready():
var id = "coins_100"
Bridge.payments.purchase(id, Callable(self, "_on_purchase"))
func _on_purchase(success, purchase):
if success:
print("Purchased: ", purchase)
func _ready():
Bridge.payments.consume_purchase("coins_100", Callable(self, "_on_consume"))
func _on_consume(success, purchase):
if success:
print("Consumed: ", purchase)
func _ready():
Bridge.payments.get_catalog(Callable(self, "_on_catalog"))
func _on_catalog(success, catalog):
if success:
for item in catalog:
print("ID: ", item.id)
print("Price: ", item.price)
print("Price Currency Code: ", item.priceCurrencyCode)
print("Price Value: ", item.priceValue)
func _ready():
Bridge.payments.get_purchases(Callable(self, "_on_purchases"))
func _on_purchases(success, purchases):
if success:
for p in purchases:
print("Owned: ", p.id)
func _ready():
Bridge.payments.purchase("coins_100", funcref(self, "_on_purchase"))
Bridge.payments.get_catalog(funcref(self, "_on_catalog"))
# Leaderboard type: 'not_available', 'in_game', 'native', 'native_popup'
Bridge.leaderboards.type
func _ready():
var leaderboard_id = "high_score"
var score = 1000
Bridge.leaderboards.set_score(leaderboard_id, score, Callable(self, "_on_set_score_completed"))
func _on_set_score_completed(success):
print("Score saved: ", success)
Works only when Bridge.leaderboards.type equals in_game:
func _ready():
Bridge.leaderboards.get_entries("high_score", Callable(self, "_on_get_entries_completed"))
func _on_get_entries_completed(success, entries):
if success:
for entry in entries:
print("Name: ", entry.name)
print("Score: ", entry.score)
print("Rank: ", entry.rank)
print("Photo: ", entry.photo)
Works only when type equals native_popup:
func _ready():
Bridge.leaderboards.show_native_popup("high_score", Callable(self, "_on_popup"))
func _on_popup(success):
print("Popup closed")
func _ready():
Bridge.leaderboards.set_score("high_score", 1000, funcref(self, "_on_set_score"))
func _ready():
var options = {}
match Bridge.platform.id:
"vk":
options = {"link": "https://..."}
"facebook":
options = {"image": "base64...", "text": "Check this game!"}
Bridge.social.share(options, Callable(self, "_on_share"))
func _on_share(success):
print("Share: ", success)
func _ready():
var options = {}
match Bridge.platform.id:
"ok":
options = {"text": "Join me!"}
"facebook":
options = {"image": "base64...", "text": "Play with me!"}
Bridge.social.invite_friends(options, Callable(self, "_on_invite"))
func _on_invite(success):
print("Invite: ", success)
func _ready():
var options = {}
match Bridge.platform.id:
"vk", "ok":
options = {"groupId": 123456}
"facebook":
options = {"isPage": true}
Bridge.social.join_community(options, Callable(self, "_on_join"))
func _on_join(success):
print("Join community: ", success)
func _ready():
Bridge.social.add_to_favorites(Callable(self, "_on_favorites"))
func _on_favorites(success):
print("Added to favorites: ", success)
func _ready():
Bridge.social.share(options, funcref(self, "_on_share"))
Bridge.social.invite_friends(options, funcref(self, "_on_invite"))
# Check support
Bridge.achievements.is_supported
Bridge.achievements.is_get_list_supported
Bridge.achievements.is_native_popup_supported
func _ready():
var options = {}
match Bridge.platform.id:
"y8":
options = {
"achievementkey": "YOUR_KEY",
"achievement": "YOUR_NAME"
}
"lagged":
options = {"achievement": "YOUR_ID"}
Bridge.achievements.unlock(options, Callable(self, "_on_unlock"))
func _on_unlock(success):
print("Unlocked: ", success)
func _ready():
Bridge.achievements.get_list(Callable(self, "_on_list"))
func _on_list(success, achievements):
if success:
for a in achievements:
print("Achievement: ", a)
func _ready():
Bridge.achievements.show_native_popup(Callable(self, "_on_popup"))
func _on_popup(success):
print("Popup closed")
func _ready():
Bridge.achievements.unlock(options, funcref(self, "_on_unlock"))
Bridge.platform.send_message("game_ready") when game is fully loadedaudio_state_changed and mute/unmute game audio accordinglypause_state_changed and pause/resume game accordinglyis_supported properties before using platform-specific featuresrewarded