GameMaker Studio · GML
Groups & clans
Groups (clans/guilds) let players band together. A player belongs to at most one group. Membership has roles and permissions, all enforced on the server.
Enable Groups
Turn on Groups in the panel and set the defaults (join policy, max members). No client setup is needed beyond an active session.
join_policy is one of "open", "request", "invite_only", "closed".
Creating a Group
Create a group with a name and optional settings, then read group_created. The creator becomes the leader.
gmda_createGroup("My Clan", { tag: "CLAN", join_policy: "request" }); // -> group_created# 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
}Browsing & Joining
Search groups and join an open one (or request to join a request-only group).
gmda_listGroups("clan"); // -> groups_listed
gmda_joinGroup("group_id"); // open groups -> group_joined# 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
}Group Info & Members
Fetch a group with its member list. Omit the id for your own group.
gmda_getGroupInfo(); // own group -> group_info_loaded
gmda_getGroupInfo("group_id"); // a specific group# 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
Invite a player, list invitations, and respond or cancel.
gmda_sendGroupInvite("player_key"); // -> group_invite_sent
gmda_listGroupInvitations(); // -> group_invitations_listed
gmda_respondGroupInvitation("invitation_id", true); // -> group_invitation_responded# 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
}Join Requests
For request-only groups: players ask to join, officers approve or reject.
gmda_createGroupRequest("group_id", "let me in"); // -> group_request_created
gmda_listGroupRequests(); // -> group_requests_listed
gmda_respondGroupRequest("request_id", true); // approve -> group_request_responded# 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
}Managing Members
Leaders and officers can kick members, change roles, and transfer leadership.
gmda_kickGroupMember("player_key"); // -> group_member_kicked
gmda_assignGroupRole("player_key", "admin"); // -> group_member_role_assigned
gmda_transferGroupLeadership("player_key"); // -> group_leadership_transferredRoles are server-defined (e.g. "admin", "member"); "leader" is assigned only via transfer.
Leaving & Disbanding
Any member can leave; the leader can disband the whole group.
gmda_leaveGroup(); // -> group_left
gmda_disbandGroup(); // leader only -> group_disbanded