GameMaker Studio · GML
Группы и кланы
Группы (кланы/гильдии) позволяют игрокам объединяться. Игрок состоит не более чем в одной группе. У членства есть роли и права, все проверяются на сервере.
Включите группы
Включите «Группы» в панели и задайте значения по умолчанию (политика вступления, максимум участников). Со стороны клиента не требуется ничего, кроме активной сессии.
join_policy это одно из значений "open", "request", "invite_only", "closed".
Создание группы
Создайте группу с названием и необязательными настройками, затем прочитайте group_created. Создатель становится лидером.
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
}Просмотр и вступление
Ищите группы и вступайте в открытую (или подавайте заявку на вступление в группу только по запросу).
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
}Информация о группе и участники
Получите группу со списком её участников. Опустите id для своей группы.
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
}Приглашения
Пригласите игрока, получите список приглашений и ответьте или отмените.
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
}Заявки на вступление
Для групп только по запросу: игроки подают заявку на вступление, офицеры одобряют или отклоняют.
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
}Управление участниками
Лидеры и офицеры могут исключать участников, менять роли и передавать лидерство.
gmda_kickGroupMember("player_key"); // -> group_member_kicked
gmda_assignGroupRole("player_key", "admin"); // -> group_member_role_assigned
gmda_transferGroupLeadership("player_key"); // -> group_leadership_transferredРоли определяются на сервере (например "admin", "member"); "leader" назначается только через передачу.
Выход и роспуск
Любой участник может выйти; лидер может распустить всю группу.
gmda_leaveGroup(); // -> group_left
gmda_disbandGroup(); // leader only -> group_disbanded