âī¸ Match Invites
Directed 1:1 invites with object payloads both ways â the reply's payload reaches the inviter as replyPayload.
extends Node
var game := OddSocketsEnhancedFeatures.new()
func _ready() -> void:
game.initialize(client)
game.challenge_invited.connect(_on_invited)
game.challenge_reply_received.connect(_on_reply)
func invite(opponent_id: String) -> void:
var result := await game.send_challenge_invite_async(
opponent_id, "match", {"arena": "ruins", "seed": randi()}, 120)
if result.has("error"):
push_warning("invite failed: " + str(result.error))
func _on_invited(data: Dictionary) -> void:
# Show an accept/decline dialog built from data.payload (the inviter's object)
var accepted: bool = await $InviteDialog.ask(data.from.userId, data.payload)
await game.reply_challenge_invite_async(
data.inviteId, accepted, {"loadout": "bow"}, "gl hf" if accepted else "busy")
func _on_reply(data: Dictionary) -> void:
# data.payload = our original invite payload, echoed
# data.replyPayload = the opponent's own object
# data.reason = their note
if data.accept:
start_match(data.payload.seed, data.replyPayload)