Godot 4 · GDScript
Grupos e clãs
Os grupos (clãs/guildas) permitem que os jogadores se unam. Um jogador pertence a no máximo um grupo. A associação tem papéis e permissões, todos aplicados no servidor.
Requisitos
Os grupos precisam estar habilitados para o seu jogo (no painel) e incluídos no seu plano. Se estiverem desabilitados, as chamadas de grupo falham com error_code "forbidden".
Políticas de entrada: open (qualquer um entra instantaneamente), request (precisa de aprovação), invite_only e closed.
Criar um Grupo
Crie um grupo; quem o chama torna-se o líder. Opcionalmente, passe uma tag, descrição, política de entrada e limite de membros. Escute 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("Criado %s" % group.name)
else: print("Falhou: %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
}Explorar e Entrar
Liste ou pesquise grupos e, então, entre em um. join_group funciona apenas para grupos open; para grupos request, envie uma solicitação de entrada (abaixo).
Gamdato.groups_listed.connect(_on_groups)
Gamdato.list_groups("dra") # pesquisa por nome
Gamdato.group_joined.connect(_on_joined)
Gamdato.join_group(group_id) # apenas grupos open
func _on_groups(groups: Array) -> void:
for grp in groups:
print("%s - %d membros" % [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
}Detalhes do Grupo e Membros
Obtenha os detalhes completos de um grupo além de sua lista de membros. Omita o id para buscar o seu próprio grupo. Chega pelo sinal group_info_loaded.
Gamdato.group_info_loaded.connect(_on_group_info)
Gamdato.get_group_info() # o seu próprio grupo
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
}Convites (do Grupo para o Jogador)
Membros com permissão convidam jogadores, listam os convites e respondem aos que são endereçados a eles.
Gamdato.group_invite_sent.connect(_on_g_invite)
Gamdato.send_group_invite(player_key, "Junte-se a nós!")
Gamdato.group_invitation_responded.connect(_on_g_resp)
Gamdato.list_group_invitations("incoming") # -> group_invitations_listed
Gamdato.respond_group_invitation(invitation_id, true) # aceitar# 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
}Solicitações de Entrada (do Jogador para o Grupo)
Para grupos request: um jogador pede para entrar, e um revisor (com permissão) aprova ou rejeita.
Gamdato.group_request_created.connect(_on_req)
Gamdato.create_group_request(group_id, "Por favor, me deixem entrar")
# Lado do revisor:
Gamdato.list_group_requests("incoming") # -> group_requests_listed
Gamdato.respond_group_request(request_id, true) # aprovar# 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
}Gerenciar Membros
Líderes e oficiais gerenciam o quadro de membros: expulsam um membro, mudam o papel de um membro ou transferem a liderança.
Gamdato.kick_group_member(player_key)
Gamdato.assign_group_role(player_key, "admin") # não "leader"
Gamdato.transfer_group_leadership(player_key)Os papéis e as classificações são aplicados no lado do servidor. A falta de permissão retorna error_code "forbidden" ou "insufficient_rank". Para tornar alguém líder, use transfer_group_leadership, não assign_group_role.
Sair ou Dissolver
Um membro sai do grupo; um líder pode dissolvê-lo por completo.
Gamdato.group_left.connect(_on_left)
Gamdato.leave_group() # status: "left" ou "disbanded"
Gamdato.disband_group() # apenas o líder
func _on_left(ok: bool, status: String, error_code: String) -> void:
if ok: print("Você %s o grupo" % status)