Godot 4 · GDScript
Groupes et clans
Les groupes (clans/guildes) permettent aux joueurs de se regrouper. Un joueur appartient au plus a un groupe. L'appartenance comporte des roles et des permissions, le tout applique sur le serveur.
Prerequis
Les groupes doivent etre actives pour votre jeu (dans le panneau) et inclus dans votre plan. S'ils sont desactives, les appels de groupe echouent avec error_code "forbidden".
Politiques d'adhesion : open (n'importe qui rejoint instantanement), request (necessite une approbation), invite_only et closed.
Creer un Groupe
Creez un groupe ; l'appelant en devient le chef. Vous pouvez passer de maniere optionnelle un tag, une description, une politique d'adhesion et une limite de membres. Ecoutez group_created.
Gamdato.group_created.connect(_on_group_created)
Gamdato.create_group("Dragons", {"tag": "DRG", "join_policy": "request"})
func _on_group_created(ok: bool, group: Dictionary, error_code: String) -> void:
if ok: print("Cree %s" % group.name)
else: print("Echec : %s" % error_code) # ex. name_taken, already_in_group# group: Dictionary
{
"id": String, # pass this to join/info/request
"name": String,
"tag": String,
"description": String,
"join_policy": "open" | "request" | "invite_only" | "closed",
"max_members": int,
"member_count": int,
"created_at": String,
"my_role": String # your role in this group
}Parcourir et Rejoindre
Listez ou recherchez des groupes, puis rejoignez-en un. join_group ne fonctionne que pour les groupes open ; pour les groupes request, envoyez plutot une demande d'adhesion (ci-dessous).
Gamdato.groups_listed.connect(_on_groups)
Gamdato.list_groups("dra") # rechercher par nom
Gamdato.group_joined.connect(_on_joined)
Gamdato.join_group(group_id) # groupes open uniquement
func _on_groups(groups: Array) -> void:
for grp in groups:
print("%s - %d membres" % [grp.name, grp.member_count])# groups: Array, each group (no my_role here):
{
"id": String,
"name": String,
"tag": String,
"description": String,
"join_policy": String,
"max_members": int,
"member_count": int,
"created_at": String
}Details du Groupe et Membres
Obtenez tous les details d'un groupe ainsi que sa liste de membres. Omettez l'id pour recuperer votre propre groupe. Arrive via group_info_loaded.
Gamdato.group_info_loaded.connect(_on_group_info)
Gamdato.get_group_info() # votre propre groupe
func _on_group_info(group: Dictionary, members: Array) -> void:
if group.is_empty():
return
for m in members:
print("%s - %s" % [m.player_name, m.role])# group: Dictionary (same shape as Create a Group), or {} if you have none
# members: Array, each member:
{
"player_key": String,
"player_name": String,
"role": String,
"joined_at": String
}Invitations (Groupe vers Joueur)
Les membres ayant la permission invitent des joueurs, listent les invitations et repondent a celles qui leur sont adressees.
Gamdato.group_invite_sent.connect(_on_g_invite)
Gamdato.send_group_invite(player_key, "Rejoins-nous !")
Gamdato.group_invitation_responded.connect(_on_g_resp)
Gamdato.list_group_invitations("incoming") # -> group_invitations_listed
Gamdato.respond_group_invitation(invitation_id, true) # accepter# group_invitations_listed -> invitations: Array, each:
{
"id": String,
"direction": "incoming" | "outgoing",
"group_id": String,
"group_name": String,
"counterpart": {
"player_key": String,
"player_name": String
},
"status": String,
"message": String,
"created_at": String,
"responded_at": String, # null while pending
"expires_at": String
}Demandes d'Adhesion (Joueur vers Groupe)
Pour les groupes request : un joueur demande a rejoindre, et un examinateur (ayant la permission) approuve ou rejette.
Gamdato.group_request_created.connect(_on_req)
Gamdato.create_group_request(group_id, "Laissez-moi entrer s'il vous plait")
# Cote examinateur :
Gamdato.list_group_requests("incoming") # -> group_requests_listed
Gamdato.respond_group_request(request_id, true) # approuver# group_requests_listed -> requests: Array, each:
{
"id": String,
"direction": "incoming" | "outgoing",
"group_id": String,
"group_name": String,
"player": {
"player_key": String,
"player_name": String
},
"status": String,
"message": String,
"created_at": String,
"responded_at": String # null while pending
}Gerer les Membres
Les chefs et les officiers gerent l'effectif : expulser un membre, changer le role d'un membre, ou transferer le commandement.
Gamdato.kick_group_member(player_key)
Gamdato.assign_group_role(player_key, "admin") # pas "leader"
Gamdato.transfer_group_leadership(player_key)Les roles et les rangs sont appliques cote serveur. L'absence de permission renvoie error_code "forbidden" ou "insufficient_rank". Pour faire de quelqu'un le chef, utilisez transfer_group_leadership, pas assign_group_role.
Quitter ou Dissoudre
Un membre quitte le groupe ; un chef peut le dissoudre entierement.
Gamdato.group_left.connect(_on_left)
Gamdato.leave_group() # status : "left" ou "disbanded"
Gamdato.disband_group() # chef uniquement
func _on_left(ok: bool, status: String, error_code: String) -> void:
if ok: print("Vous avez %s le groupe" % status)