Документация Steamworks
Интерфейс ISteamMatchmaking
Интерфейс для доступа клиентов к подбору игр, избранным серверам и игровым лобби.

Дополнительная информация доступна в разделе «Подбор игр и лобби».

Функции-члены

Функции-члены ISteamMatchmaking вызываются с помощью глобальной функции доступа SteamMatchmaking().

AddFavoriteGame

int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer );
НазваниеТипОписание
nAppIDAppId_tAppID игры.
nIPuint32IP-адрес сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001.
nConnPortuint16Порт, используемый для подключения к серверу, в порядке узлов.
nQueryPortuint16Порт, используемый для запросов к серверу, в порядке узлов.
unFlagsuint32Задаёт, нужно ли добавить сервер в список избранных или в список посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone.
rTime32LastPlayedOnServeruint32Это должно быть текущее время в формате UNIX (секунды с 1 января 1970 года).

Добавляет игровой сервер в локальный список избранных, либо обновляет время игры на сервере, если он уже находится в списке.

Возвращает: int

AddRequestLobbyListCompatibleMembersFilter

void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamID

Не используется. Проверяет совместимость игрока на основе системы «друг-враг».

AddRequestLobbyListDistanceFilter

void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter );
НазваниеТипОписание
eLobbyDistanceFilterELobbyDistanceFilterУказывает максимальное расстояние.

Задаёт расстояние, в пределах которых нужно искать лобби (исходя из данных о IP пользователей и карты IP на сервере Steam).

AddRequestLobbyListFilterSlotsAvailable

void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable );
НазваниеТипОписание
nSlotsAvailableintЧисло мест, которые должны быть открытыми.

Позволяет показывать в результатах поиска только те лобби, где доступно определённое число мест для игроков.

AddRequestLobbyListNearValueFilter

void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo );
НазваниеТипОписание
pchKeyToMatchconst char *Ключ фильтра. Не может быть длиннее, чем k_nMaxLobbyKeyLength.
nValueToBeCloseTointЗначение, по которому будут отсортированы лобби.

Сортирует результаты по степени удалённости от указанного значения.

Близкие фильтры не отфильтровывают значения, а влияют на то, как сортируются результаты. Вы можете указать несколько близких фильтров. Первый из них будет иметь наибольшее влияние, последний — наименьшее.

AddRequestLobbyListNumericalFilter

void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType );
НазваниеТипОписание
pchKeyToMatchconst char *Ключ фильтра. Не может быть длиннее, чем k_nMaxLobbyKeyLength.
nValueToMatchintЧисло, с которым требуется сравнить.
eComparisonTypeELobbyComparisonТип сравнения.

Задаёт числовой фильтр сравнения следующего вызова RequestLobbyList.

AddRequestLobbyListResultCountFilter

void AddRequestLobbyListResultCountFilter( int cMaxResults );
НазваниеТипОписание
cMaxResultsintМаксимальное число возвращаемых лобби.

Задаёт максимальное число возвращаемых лобби. Чем ниже число, тем быстрее загрузить результаты и информацию о лобби в клиент.

AddRequestLobbyListStringFilter

void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType );
НазваниеТипОписание
pchKeyToMatchconst char *Ключ фильтра. Не может быть длиннее, чем k_nMaxLobbyKeyLength.
pchValueToMatchconst char *Строка, с которой требуется сравнить.
eComparisonTypeELobbyComparisonТип сравнения.

Задаёт строковой фильтр сравнения следующего вызова RequestLobbyList.

CheckForPSNGameBootInvite

void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes );
НазваниеТипОписание
iGameBootAttributesunsigned int

Устарело: только для PS3.

CreateLobby

SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers );
НазваниеТипОписание
eLobbyTypeELobbyTypeТип и видимость данного лобби. Значения можно изменить позже с помощью SetLobbyType.
cMaxMembersintМаксимальное число игроков, которые могут присоединиться к этому лобби. Не может быть больше 250.

Создаёт новое лобби подбора игр.

Возвращаемые значения: SteamAPICall_t, который необходимо использовать с результатом вызова LobbyCreated_t.
Активирует обратный вызов LobbyEnter_t.
Активирует обратный вызов LobbyDataUpdate_t.
Если полученный результат вызова LobbyCreated_t показывает успех, значит пользователь присоединился к лобби и оно готово к использованию.

Также будет получен обратный вызов LobbyEnter_t, поскольку локальный пользователь присоединился к собственному лобби.

DeleteLobbyData

bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, для которого требуется удалить метаданные.
pchKeyconst char *Ключ, для которого требуется удалить данные.

Удаляет ключ метаданных в лобби.

Это может быть сделано только владельцем лобби.

Данные будут отправлены, только если ключ существовал. Перед отправкой данных есть небольшая задержка, так что вы можете отправить этот вызов несколько раз с необходимыми данными, и они будут автоматически собраны в единый пакет и высланы после последнего вызова.

Возвращаемые значения: bool
true, если ключ/значение удалены. В противном случае false, если steamIDLobby или pchKey недействительны.

GetFavoriteGame

bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer );
НазваниеТипОписание
iGameintИндекс избранного игрового сервера, о котором требуется получить информацию. Значение должно быть в интервале между 0 и GetFavoriteGameCount
pnAppIDAppId_t *Возвращает AppID, для которого предназначен данный сервер.
pnIPuint32 *Возвращает IP-адрес сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001.
pnConnPortuint16 *Возвращает порт, используемый для подключения к серверу, в порядке узлов.
pnQueryPortuint16 *Возвращает порт, используемый для запросов к серверу, в порядке узлов.
punFlagsuint32 *Сообщает, нужно ли добавить сервер в список избранных или в список посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone.
pRTime32LastPlayedOnServeruint32 *Возвращает время, когда сервер был в последний раз добавлен в список избранных в формате UNIX-времени (секунды с 1 января 1970 года).

Получает информацию об избранном игровом сервере (по указанному индексу).

ВНИМАНИЕ: вы должны вызвать GetFavoriteGameCount до того, как выполнить этот вызов.

Возвращает: bool
true, если информация получена. false, если iGame был недопустимым индексом.

См. также: AddFavoriteGame, RemoveFavoriteGame

GetFavoriteGameCount

int GetFavoriteGameCount();
Получает число избранных и недавно посещённых серверов, которые пользователь хранит локально.

Возвращает: int


См. также: AddFavoriteGame, RemoveFavoriteGame

GetLobbyByIndex

CSteamID GetLobbyByIndex( int iLobby );
НазваниеТипОписание
iLobbyintИндекс лобби, SteamID которого требуется получить. От 0 до LobbyMatchList_t.m_nLobbiesMatching.

Получает SteamID лобби по указанному индексу после получения результатов RequestLobbyList.

ВНИМАНИЕ: вы можете выполнить этот вызов только после того, как получен результат вызова LobbyMatchList_t.

Возвращает: CSteamID
Возвращает k_steamIDNil, если предоставленный оказался недействительным, либо если лобби не найдены.

GetLobbyChatEntry

int GetLobbyChatEntry( CSteamID steamIDLobby, int iChatID, CSteamID *pSteamIDUser, void *pvData, int cubData, EChatEntryType *peChatEntryType );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, из которого требуется получить сообщение в чате. Почти всегда этот параметр должен быть LobbyChatMsg_t::m_ulSteamIDUser.
iChatIDintИндекс сообщения в чате лобби. Почти всегда этот параметр должен быть LobbyChatMsg_t::m_iChatID.
pSteamIDUserCSteamID *Если задано, возвращает SteamID пользователя, отправившего сообщение. Обычно не требуется, поскольку совпадает с LobbyChatMsg_t::m_ulSteamIDUser.
pvDatavoid *Возвращает данные сообщения, копируя их в этот буфер. Размер буфера должен быть до 4 килобайт.
cubDataintРазмер буфера, выделяемого для pvData.
peChatEntryTypeEChatEntryType *Если задано, будет просто возвращать k_EChatEntryTypeChatMsg. Обычно это просто может быть NULL.

Получает данные сообщения в чате лобби после получения обратного вызова LobbyChatMsg_t.

Возвращает: int
Число байтов, скопированных в pvData.

См. также: SendLobbyChatMsg

GetLobbyData

const char * GetLobbyData( CSteamID steamIDLobby, const char *pchKey );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, из которого требуется получить метаданные.
pchKeyconst char *Ключ, для которого требуется получить значение.

Получает метаданные, связанные с указанным ключом в указанном лобби.

ВНИМАНИЕ: вы можете получить метаданные только тех лобби, о которых известно клиенту. Это может быть список лобби из LobbyMatchList_t, полученные данные из RequestLobbyData или лобби, к которому присоединился клиент.

Возвращает: const char *
Возвращает пустую строку (""), если для ключа не задано значение, либо если параметр steamIDLobby недействителен.

GetLobbyDataByIndex

bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize );
НазваниеТипОписание
steamIDLobbyCSteamIDЭто ОБЯЗАТЕЛЬНО должен быть то же лобби, что и в предыдущем вызове GetLobbyDataCount!
iLobbyDataintИндекс между 0 и GetLobbyDataCount.
pchKeychar *Возвращает название ключа по указанному индексу, которое копируется в буфер.
cchKeyBufferSizeintРазмер буфера, выделяемого для pchKey. Обычно это должно быть k_nMaxLobbyKeyLength.
pchValuechar *Возвращает значение, связанное с ключом по указанному индексу, которое копируется в буфер.
cchValueBufferSizeintРазмер буфера, выделяемого для pchValue. Обычно это должно быть k_cubChatMetadataMax.

Получает метаданные лобби (пара ключ-значение) по указанному индексу.

ВНИМАНИЕ: вы должны вызвать GetLobbyDataCount до того, как выполнить этот вызов.

Возвращает: bool
true при успехе, в противном случае false, если steamIDLobby или iLobbyData недействительны.

GetLobbyDataCount

int GetLobbyDataCount( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, из которого требуется получить число записей данных.

Получает число ключей метаданных для указанного лобби.

ВНИМАНИЕ: вы можете получить метаданные только тех лобби, о которых известно клиенту. Это может быть список лобби из LobbyMatchList_t, полученные данные из RequestLobbyData или лобби, к которому присоединился клиент.

Используется для итерации. После данного вызова используйте GetLobbyDataByIndex для получения пары ключ-значение каждой записи метаданных.

ВНИМАНИЕ: обычно должно использоваться только для поиска и устранения ошибок.

Возвращает: int
Возвращает 0, если steamIDLobby недействителен.

Пример:
void ListLobbyData( CSteamID lobbyID ) { int nData = SteamMatchmaking()->GetLobbyDataCount( lobbyID ); char key[k_nMaxLobbyKeyLength]; char value[k_cubChatMetadataMax]; for( int i = 0; i < nData; ++i ) { bool bSuccess = SteamMatchmaking()->GetLobbyDataByIndex( lobbyID, i, key, k_nMaxLobbyKeyLength, value, k_cubChatMetadataMax ); if ( bSuccess ) { printf( "Lobby Data %d, Key: \"%s\" - Value: \"%s\"\n", i, key, value ); } } }

GetLobbyGameServer

bool GetLobbyGameServer( CSteamID steamIDLobby, uint32 *punGameServerIP, uint16 *punGameServerPort, CSteamID *psteamIDGameServer );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, из которого требуется получить информацию об игровом сервере.
punGameServerIPuint32 *Возвращает IP-адрес игрового сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001, если задан.
punGameServerPortuint16 *Возвращает порт соединения игрового сервера в порядке узлов, если задан.
psteamIDGameServerCSteamID *Возвращает SteamID игрового сервера, если задан.

Получает информацию об игровом сервере, заданном в лобби.

Либо IP и порт, либо SteamID игрового сервера должны быть действительными (в зависимости от того, как вы хотите, чтобы подключались ваши клиенты).

Возвращаемые значения: bool
true, если и лобби, и заданный игровой сервер действительны, в противном случае false.

См. также: SetLobbyGameServer

GetLobbyMemberByIndex

CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember );
НазваниеТипОписание
steamIDLobbyCSteamIDЭто ОБЯЗАТЕЛЬНО должен быть то же лобби, что и в предыдущем вызове GetNumLobbyMembers!
iMemberintИндекс между 0 и GetNumLobbyMembers.

Получает SteamID участника лобби по указанному индексу.

ВНИМАНИЕ: вы должны вызвать GetNumLobbyMembers до того, как выполнить этот вызов.

ВНИМАНИЕ: для получения SteamID других пользователей в этом лобби текущий пользователь должен также находиться в нём.

Возвращает: CSteamID
Недопустимые индексы возвращают k_steamIDNil.

GetLobbyMemberData

const char * GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, в котором находится другой игрок.
steamIDUserCSteamIDSteamID игрока, для которого требуется получить метаданные.
pchKeyconst char *Ключ, для которого требуется получить значение.

Получает метаданные пользователей в указанном лобби от другого игрока.

Они могут быть запрошены только для участников лобби, в которых вы находитесь в настоящий момент.

Возвращаемые значения: const char *
Возвращает NULL, если steamIDLobby недействителен, либо steamIDUser не находится в лобби.

Возвращает пустую строку (""), если pchKeyне задан для игрока.

См. также: SetLobbyMemberData

GetLobbyMemberLimit

int GetLobbyMemberLimit( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, из которого требуется получить лимит участников.

Текущий лимит на число пользователей, которые могут присоединиться к лобби.
Возвращает 0, если лимит не определён.

Возвращает: int
Возвращает 0, если для указанного лобби нет доступных метаданных.

GetLobbyOwner

CSteamID GetLobbyOwner( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, для которого требуется узнать владельца.

Возвращает владельца текущего лобби.

ВНИМАНИЕ: для доступа к данным вы должны быть участником лобби.

У лобби всегда один владелец: если текущий владелец выйдет, другой пользователь в лобби станет владельцем автоматически. Возможно (но это случается редко) присоединиться к лобби как раз в тот момент, когда владелец покидает его, тогда вы станете владельцем лобби.

Возвращаемые значения: CSteamID
Возвращает k_steamIDNil, если вы не находитесь в лобби.

См. также: SetLobbyOwner

GetNumLobbyMembers

int GetNumLobbyMembers( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, для которого требуется узнать число участников.

Получает число пользователей в лобби.

ВНИМАНИЕ: для получения SteamID других пользователей в этом лобби текущий пользователь должен также находиться в нём.

Используется для итерации. После данного вызова используйте GetLobbyMemberByIndex для получения SteamID всех участников лобби. Информация о других участниках лобби (имя, аватар и т. д.) получается автоматически и доступна с помощью интерфейса ISteamFriends.

Возвращает: int
Число участников лобби, 0 если у текущего пользователя нет данных из лобби.

InviteUserToLobby

bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, в который приглашается пользователь.
steamIDInviteeCSteamIDSteamID приглашаемого пользователя.

Приглашает другого пользователя в лобби.

Если указанный пользователь нажимает «Присоединиться», если пользователь находится в игре, будет отправлен обратный вызов GameLobbyJoinRequested_t.
Если игра ещё не запущена, тогда она будет автоматически запущена с параметром командной строки +connect_lobby <64-bit lobby Steam ID>.

Возвращает: bool
true, если приглашение отправлено. В противном случае false, если локальный пользователь не находится в лобби, не удалось подключиться к Steam или указанный ID пользователя оказался недействительным.

ВНИМАНИЕ: этот вызов не проверяет, принял ли пользователь приглашение.

JoinLobby

SteamAPICall_t JoinLobby( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, в которое требуется войти.

Присоединяется к существующему лобби.

SteamID лобби может быть получен из поиска с помощью RequestLobbyList, при присоединении к другу или из приглашения.

Возвращает: SteamAPICall_t, который необходимо использовать с результатом вызова LobbyEnter_t.
Активирует обратный вызов LobbyDataUpdate_t.

LeaveLobby

void LeaveLobby( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamIDЛобби, которое необходимо покинуть.

Выходит из лобби, в котором пользователь находится в данный момент. На стороне клиента это происходит незамедлительно, другие пользователи в лобби будут оповещены с помощью обратного вызова LobbyChatUpdate_t.

RemoveFavoriteGame

bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags );
НазваниеТипОписание
nAppIDAppId_tAppID игры.
nIPuint32IP-адрес сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001.
nConnPortuint16Порт, используемый для подключения к серверу, в порядке узлов.
nQueryPortuint16Порт, используемый для запросов к серверу, в порядке узлов.
unFlagsuint32Добавлен ли сервер в список избранных или в список посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone.

Удаляет игровой сервер из локального списка избранных.

Возвращает: bool
true, если сервер удалён. В противном случае false, если указанный сервер не был в списке избранных.

RequestLobbyData

bool RequestLobbyData( CSteamID steamIDLobby );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, для которого требуется обновить метаданные.

Обновляет все метаданные для лобби, в котором вы не находитесь сейчас.

Для тех лобби, в которых вы являетесь участником это не требуется, для них данные всегда будут актуальными. Эту функцию можно использовать для обновления информации о лобби, полученных от RequestLobbyList, либо для доступных через друзей.

Возвращает: bool
Активирует обратный вызов LobbyDataUpdate_t.
true, если запрос отправлен на сервер. false если не удалось установить соединение со Steam, либо если параметр steamIDLobby недействителен.

Если указанное лобби не существует, LobbyDataUpdate_t::m_bSuccess будет приравнено к false.

RequestLobbyList

SteamAPICall_t RequestLobbyList();
Получает отфильтрованный список подходящих лобби.

В каждый момент времени может выполняться только один поиск. При отправке нового запроса старый будет отменён. В зависимости от скорости соединения пользователя с серверами Steam завершение вызова может занять от 300 мс до 5 сек. Максимальное время ожидания — 20 сек.

ВНИМАНИЕ: до отправки данного вызова для фильтрования результатов ОБЯЗАТЕЛЬНО вызвать одну из функций AddRequestLobbyList*. Фильтры очищаются при каждом вызове этой функции.

ВНИМАНИЕ: если на вызвать AddRequestLobbyListDistanceFilter, будет использоваться k_ELobbyDistanceFilterDefault, то есть будут найдены матчи в том же или ближайших регионах.

ВНИМАНИЕ: этот вызов возвращает только незаполненные лобби, помеченные как k_ELobbyTypePublic или k_ELobbyTypeInvisible, а также для них задано значение SetLobbyJoinable (т. е. к ним можно присоединиться).

Возвращаемые значения: SteamAPICall_t, который необходимо использовать с результатом вызова LobbyMatchList_t.
ВНИМАНИЕ: LobbyMatchList_t также возвращается в качестве обратного вызова (для совместимости с более старыми приложениями), но вы должны по возможности использовать результат вызова.

См. также: AddRequestLobbyListStringFilter, AddRequestLobbyListNumericalFilter, AddRequestLobbyListNearValueFilter, AddRequestLobbyListFilterSlotsAvailable, AddRequestLobbyListDistanceFilter, AddRequestLobbyListResultCountFilter

Пример:
class CLobbyListManager { CCallResult< CLobbyListManager, LobbyMatchList_t > m_CallResultLobbyMatchList; void FindLobbies() { // Функции SteamMatchmaking()->AddRequestLobbyListFilter*() вызываются здесь, прежде чем RequestLobbyList() SteamAPICall_t hSteamAPICall = SteamMatchmaking()->RequestLobbyList(); m_CallResultLobbyMatchList.Set( hSteamAPICall, this, &CLobbyListManager::OnLobbyMatchList ); } void OnLobbyMatchList( LobbyMatchList_t *pLobbyMatchList, bool bIOFailure ) { // список лобби получен с серверов Steam, используем результаты } }

SendLobbyChatMsg

bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, в которое требуется отправить сообщение.
pvMsgBodyconst void *Это может быть текст или двоичные данные размером до 4 килобайт.
cubMsgBodyintРазмер pvMsgBody в байтах. Если это текстовое сообщение, тогда это должно быть равно strlen( text ) + 1, чтобы включить null.

Транслирует сообщение чата (текст или двоичные данные) всем пользователям лобби.

Все пользователи лобби (включая локального пользователя) получат обратный вызов LobbyChatMsg_t с сообщением.

Если вы отправляете двоичные данные, вы должны задать префикс в виде заголовка сообщения, чтобы вы знали, что это ваши специальные данные, а не просто старое текстовое сообщение.

Если во время обмена сообщениями должно быть вынесено некое решение (к примеру, пользователь должен выбрать из набора персонажей, а кроме того, нужно убедиться, что только один пользователь выбирает персонажа), вы можете поручить принятие решения владельцу лобби. GetLobbyOwner возвращает текущего владельца лобби. В лобби может быть один и только один владелец. Так что в сценарии, когда пользователю нужно выбрать персонажа, он может отправить двоичное сообщение «Я хочу быть Zoe», и когда владелец лобби увидит сообщение, убедится, что оно OK, после чего транслирует результат (пользователь X — это Zoe).

Эти сообщения отправляются через серверы Steam, так что пропускная способность ограничена. Для объемного трафика, к примеру, голосовых или игровых данных, используйте API организации сети.

Возвращает: bool
Активирует обратный вызов LobbyChatMsg_t.
true, если сообщение отправлено. В противном случае false, если сообщение слишком мало или слишком велико, либо если не удалось подключиться к Steam.

SetLinkedLobby

bool SetLinkedLobby( CSteamID steamIDLobby, CSteamID steamIDLobbyDependent );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID первичного лобби.
steamIDLobbyDependentCSteamIDSteamID, который будет привязан к первичному лобби.

Не используется. Связывает два лобби в целях проверки совместимости игрока и использованием системы друг-враг.

Необходимо быть владельцем обоих лобби.

Возвращает: bool
true, если запрос отправлен на серверы Steam.
false, если локальный пользователь не является владельцем обоих лобби или не удалось подключиться к Steam.

SetLobbyData

bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, для которого требуется задать метаданные.
pchKeyconst char *Ключ, для которого требуется задать данные. Не может быть длиннее, чем k_nMaxLobbyKeyLength.
pchValueconst char *Значение, которое необходимо задать. Не может быть длиннее, чем k_cubChatMetadataMax.

Задаёт пару ключ-значение метаданных лобби. Может использоваться для указания названия лобби, текущей карты, игрового режима и т. п.

Это может быть сделано только владельцем лобби. Участники лобби должны использовать SetLobbyMemberData.

Каждый пользователь в лобби получит уведомление об изменении данных лобби с помощью обратного вызова LobbyDataUpdate_t, а присоединяющиеся к лобби новые пользователи получат существующие данные.

Данные будут отправлены, только если они изменены. Перед отправкой данных есть небольшая задержка, так что вы можете отправить этот вызов несколько раз с необходимыми данными, и они будут автоматически собраны в единый пакет и высланы после последнего вызова.

Возвращаемые значения: bool
true, если данные заданы. false, если steamIDLobby недействителен или ключ или значение слишком длинны.

SetLobbyGameServer

void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, из которого требуется задать информацию об игровом сервере.
unGameServerIPuint32Задаёт IP-адрес игрового сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001.
unGameServerPortuint16Задаёт порт соединения игрового сервера в порядке узлов.
steamIDGameServerCSteamIDЗадаёт SteamID игрового сервера. Используйте k_steamIDNil, если задать этот параметр не требуется.

Задаёт игровой сервер, связанный с лобби.

Это может быть сделано только владельцем лобби.

Либо IP и порт, либо SteamID игрового сервера должны быть действительными (в зависимости от того, как вы хотите, чтобы подключались ваши клиенты).

Всем игрокам в лобби будет отправлен обратный вызов LobbyGameCreated_t, обычно в этот момент игроки присоединятся к указанному игровому серверу.

Возвращаемые значения: void
Активирует обратный вызов LobbyGameCreated_t.


См. также: GetLobbyGameServer

SetLobbyJoinable

bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби.
bLobbyJoinableboolЗарешить (true) или запретить (false) пользователям присоединяться к лобби?

Устанавливает, могут ли другие игроки присоединиться к лобби. По умолчанию для новых лобби — могут.

Если запретить присоединяться, никакие другие игроки не смогут присоединиться, даже если это друзья или им отправлено приглашение.

Лобби, к которым запрещено присоединяться, не возвращаются при поиске лобби.

Возвращаемые значения: bool
true при успехе, в противном случае false, если вы не являетесь владельцем лобби.

SetLobbyMemberData

void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, в котором требуется задать метаданные.
pchKeyconst char *Ключ, для которого требуется задать данные. Не может быть длиннее, чем k_nMaxLobbyKeyLength.
pchValueconst char *Значение, которое необходимо задать. Не может быть длиннее, чем k_cubChatMetadataMax.

Задаёт метаданные каждого игрока в лобби для локального игрока.

Каждый пользователь в лобби получит уведомление об изменении данных лобби с помощью обратного вызова LobbyDataUpdate_t, а присоединяющиеся к лобби новые пользователи получат существующие данные.

Перед отправкой данных есть небольшая задержка, так что вы можете отправить этот вызов несколько раз с необходимыми данными, и они будут автоматически собраны в единый пакет и высланы после последнего вызова.

Возвращает: void
Активирует обратный вызов LobbyDataUpdate_t.


См. также: GetLobbyMemberData

SetLobbyMemberLimit

bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, для которого требуется задать лимит участников.
cMaxMembersintМаксимальное число игроков, разрешённых в этом лобби. Не может быть больше 250.

Задаёт максимальное число игроков, которые могут присоединиться к этому лобби.

Это также задаётся при создании лобби с помощью CreateLobby.
Это может быть сделано только владельцем лобби.

Возвращает: bool
true, если лимит задан.
false, если вы не являетесь владельцем указанного лобби.

SetLobbyOwner

bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, где произойдут изменения.
steamIDNewOwnerCSteamIDSteamID пользователя, который станет новым владельцем лобби. Он должен находиться в лобби.

Меняет владельца лобби.

Это может быть сделано только владельцем лобби. Активирует LobbyDataUpdate_t для всех пользователей в лобби, каждый пользователь должен обновить локальное состояние лобби. Обычно новый владелец отображается при помощи иконки короны, показываемой рядом с его именем.

Возвращает: bool
Активирует обратный вызов LobbyDataUpdate_t.
true, если владелец изменён.
false, если вы не являетесь текущим владельцем лобби, steamIDNewOwner не является участником лобби, либо если не удалось установить соединение со Steam.

См. также: GetLobbyOwner

SetLobbyType

bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType );
НазваниеТипОписание
steamIDLobbyCSteamIDSteamID лобби, для которого требуется задать тип.
eLobbyTypeELobbyTypeЗадаваемый новый тип лобби.

Обновляет тип лобби.

Это также задаётся при создании лобби с помощью CreateLobby.
Это может быть сделано только владельцем лобби.

Возвращает: bool
true при успехе, в противном случае false, если вы не являетесь владельцем лобби.

Обратные вызовы

Далее приведён список обратных вызовов, которые могут быть получены при вызове SteamAPI_RunCallbacks. Многие из них могут быть получены сразу в ответ на функции-члены ISteamMatchmaking.

FavoritesListAccountsUpdated_t



НазваниеТипОписание
m_eResultEResult

FavoritesListChanged_t

Сервер добавлен в список избранных или удалён из него, обновите его.

НазваниеТипОписание
m_nIPuint32Если равно 0, IP будет означать весь список. Любое другое значение означает только один сервер. В порядке узлов, к примеру, 127.0.0.1 == 0x7f000001.
m_nQueryPortuint32Если параметр m_nIP задан, то это новый порт запросов сервера, в порядке узлов.
m_nConnPortuint32Если параметр m_nIP задан, то это новый порт соединения сервера, в порядке узлов.
m_nAppIDuint32Если параметр m_nIP задан, то это AppID, к которому принадлежит игровой сервер.
m_nFlagsuint32Если параметр m_nIP задан, этот параметр возвращает, находится ли сервер в списке избранных или в списке посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone.
m_bAddboolЕсли параметр m_nIP задан, это значение показывает, добавлен сервер в список (true) или удалён из него (false).
m_unAccountIdAccountID_t

LobbyChatMsg_t

Получено сообщение в чате (текстовое или двоичное). После получения этого обратного вызова для получения содержимого сообщения необходимо использовать GetLobbyChatEntry.

НазваниеТипОписание
m_ulSteamIDLobbyuint64SteamID лобби, в котором отправлено это сообщение.
m_ulSteamIDUseruint64SteamID пользователя, отправившего сообщение. Обратите внимание, что это мог быть и локальный пользователь.
m_eChatEntryTypeuint8Тип полученного сообщения. Это фактически EChatEntryType.
m_iChatIDuint32Индекс сообщения чата для использования с GetLobbyChatEntry. Недействителен вне контекста этого обратного вызова, поэтому хранить его нельзя.

Связанные функции: SendLobbyChatMsg

LobbyChatUpdate_t

Состояние чата в лобби изменилось, обычно отправляется, когда пользователь присоединился или покинул лобби.

НазваниеТипОписание
m_ulSteamIDLobbyuint64SteamID лобби.
m_ulSteamIDUserChangeduint64Пользователь, чей статус в лобби изменился. Может быть и получатель.
m_ulSteamIDMakingChangeuint64Участник лобби, внёсший изменения. Это значение может отличаться от m_ulSteamIDUserChanged, если пользователя выгоняют, заглушают и т. п. К примеру, если один пользователь выгоняет другого из лобби, это будет ID выгоняющего пользователя.
m_rgfChatMemberStateChangeuint32Битовое поле для значений EChatMemberStateChange.

LobbyCreated_t

Результат нашего запроса на создание лобби. В этот момент пользователи уже присоединились к лобби, оно готово к использованию, а также будет получен обратный вызов LobbyEnter_t (поскольку локальный пользователь присоединяется к собственному лобби).

НазваниеТипОписание
m_eResultEResultРезультат операции.

Возможные значения:
  • k_EResultOK. Лобби создано.
  • k_EResultFail. Сервер ответил, но это неизвестная внутренняя ошибка.
  • k_EResultTimeout. Сообщение серверам Steam отправлено, но они не ответили.
  • k_EResultLimitExceeded. Ваш игровой клиент создал слишком много лобби, на него наложены ограничения.
  • k_EResultAccessDenied. Ваша игра не настроена на создание лобби, либо у вашего клиента нет прав играть в эту игру.
  • k_EResultNoConnection. Клиент Steam не подключен к серверу Steam.
m_ulSteamIDLobbyuint64SteamID созданного лобби, если произошёл сбой — 0.

Связанные функции: CreateLobby

LobbyDataUpdate_t

Метаданные лобби изменились.

Если m_ulSteamIDMember — пользователь в лобби, тогда используйте GetLobbyMemberData для получения данных пользователя. В противном случае, если m_ulSteamIDMember == m_ulSteamIDLobby, используйте GetLobbyData для получения метаданных лобби.

НазваниеТипОписание
m_ulSteamIDLobbyuint64SteamID лобби.
m_ulSteamIDMemberuint64SteamID либо участника, чьи данные изменились, либо самой комнаты.
m_bSuccessuint8true, если данные лобби изменены, в противном случае false.

Связанные функции: CreateLobby, JoinLobby, SetLobbyMemberData, RequestLobbyData, SetLobbyOwner

LobbyEnter_t

Получается после попытки войти в лобби. Метаданные лобби доступны для использования после получения этого обратного вызова.

НазваниеТипОписание
m_ulSteamIDLobbyuint64SteamID лобби, в которое вы вошли.
m_rgfChatPermissionsuint32Не используется. Всегда 0.
m_bLockedboolЕсли true, только приглашённые пользователи могут присоединиться.
m_EChatRoomEnterResponseuint32Это фактически значение EChatRoomEnterResponse. Это будет приравнено к k_EChatRoomEnterResponseSuccess, если удалось присоединиться к лобби, в противном случае k_EChatRoomEnterResponseError.

Связанные функции: CreateLobby, JoinLobby

LobbyGameCreated_t

Игровой сервер задан с помощью SetLobbyGameServer, все участники лобби могут присоединиться. Отдельные клиенты самостоятельно принимают решение о том, что делать. Обычное игровое поведение заключается в том, чтобы выйти из лобби и подключиться к указанному игровому серверу. Но при желании лобби может открываться открытым на протяжении всей сессии.

НазваниеТипОписание
m_ulSteamIDLobbyuint64Лобби, задавшее игровой сервер.
m_ulSteamIDGameServeruint64SteamID игрового сервера, если задан.
m_unIPuint32IP-адрес игрового сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001, если задан.
m_usPortuint16Порт соединения игрового сервера в порядке узлов, если задан.

Связанные функции: SetLobbyGameServer

LobbyInvite_t

Кто-то приглашает вас в лобби. При обычных обстоятельствах вам ничего не нужно делать, поскольку интерфейс Steam покажет уведомление и сообщение вида «пользователь <user> пригласил вас в лобби, присоединиться?».

Если пользователь за пределами игры решает присоединиться, игра будет автоматически запущена с параметром командной строки +connect_lobby <64-bit lobby id>, или если он уже в игре — с обратным вызовом GameLobbyJoinRequested_t.

НазваниеТипОписание
m_ulSteamIDUseruint64SteamID пользователя, отправившего приглашение.
m_ulSteamIDLobbyuint64SteamID лобби, куда мы приглашены.
m_ulGameIDuint64GameID лобби, куда мы приглашены.

LobbyKicked_t

В данный момент не используется! Если вам нужно реализовать изгнание, создайте особый пакет, отправляемый с SendLobbyChatMsg. Когда пользователь получает этот пакет, он должен вызвать LeaveLobby.

НазваниеТипОписание
m_ulSteamIDLobbyuint64
m_ulSteamIDAdminuint64
m_bKickedDueToDisconnectuint8

LobbyMatchList_t

Результат при запросе списка лобби. Вы должны выполнить итерацию по списку с помощью GetLobbyByIndex с индексами от 0 до m_nLobbiesMatching-1.

НазваниеТипОписание
m_nLobbiesMatchinguint32Число лобби со SteamID, которые удовлетворяли критериям поиска.

Связанные функции: RequestLobbyList

PSNGameBootInviteResult_t

Устарело: только для PS3.

НазваниеТипОписание
m_bGameBootInviteExistsbool
m_steamIDLobbyCSteamID

Перечисления

Далее приведён список перечислений, которые определены для использования с ISteamMatchmaking.

EChatMemberStateChange

Флаги, описывающие, как изменилось состояние пользовательского лобби. Предоставляются в LobbyChatUpdate_t.

НазваниеЗначениеОписание
k_EChatMemberStateChangeEntered0x0001Пользователь присоединился или присоединяется к лобби.
k_EChatMemberStateChangeLeft0x0002Пользователь покинул или покидает лобби.
k_EChatMemberStateChangeDisconnected0x0004Пользователь отсоединён, не покинув сначала лобби.
k_EChatMemberStateChangeKicked0x0008Пользователь выгнан.
k_EChatMemberStateChangeBanned0x0010Пользователь выгнан и заблокирован.

ELobbyComparison

Опции фильтра поиска лобби. Может быть задано AddRequestLobbyListStringFilter и AddRequestLobbyListNearValueFilter.

НазваниеЗначениеОписание
k_ELobbyComparisonEqualToOrLessThan-2Значение лобби должно быть равно или меньше данного.
k_ELobbyComparisonLessThan-1Значение лобби должно быть меньше данного.
k_ELobbyComparisonEqual0Значение лобби должно быть равно данному.
k_ELobbyComparisonGreaterThan1Значение лобби должно быть больше данного.
k_ELobbyComparisonEqualToOrGreaterThan2Значение лобби должно быть равно или больше данного.
k_ELobbyComparisonNotEqual3Значение лобби должно быть не равно данному.

ELobbyDistanceFilter

Фильтры дистанции поиска лобби при запросе списка лобби. Результаты фильтруются от ближайшего к дальнейшему. Может быть задано с помощью AddRequestLobbyListDistanceFilter.

НазваниеЗначениеОписание
k_ELobbyDistanceFilterClose0Возвращаются лобби только непосредственно из этого региона.
k_ELobbyDistanceFilterDefault1Возвращаются лобби только из этого и соседних регионов.
k_ELobbyDistanceFilterFar2В играх с мягкими требованиями к задержке возвращаются лобби примерно с половины окружности земного шара.
k_ELobbyDistanceFilterWorldwide3Без фильтра. Будут подобраны лобби и в Индии, и в Нью-Йорке (не рекомендуется, задержка будет достигать нескольких секунд.

ELobbyType

Указывает тип лобби, задаётся с помощью CreateLobby и SetLobbyType.

НазваниеЗначениеОписание
k_ELobbyTypePrivate0Присоединиться к лобби можно только по приглашению.
k_ELobbyTypeFriendsOnly1Присоединиться могут друзья и приглашённые, но в списке лобби не показывается.
k_ELobbyTypePublic2Показывается друзьям и при поиске.
k_ELobbyTypeInvisible3Показывается при поиске, но не другим.
Используется, если вы хотите, чтобы пользователь находился в двух лобби, к примеру, для сопоставления групп. Пользователь может находиться только в одном обычном лобби и в двух невидимых лобби.

Typedefs

Далее приведён список объявлений typedef, которые определены для использования с ISteamMatchmaking.

НазваниеБазовый типОписание
HServerListRequestvoid*Дескриптор, получаемый при запросе списка серверов.
HServerQueryintДескриптор, получаемый при запросе информации об отдельном сервере.

Константы

Далее приведён список констант, которые определены для использования с ISteamMatchmaking.

НазваниеТипЗначениеОписание
HSERVERQUERY_INVALIDint0xffffffff
k_nMaxLobbyKeyLengthint255Максимальный размер ключа метаданных лобби.
k_unFavoriteFlagFavoriteuint320x01Этот избранный игровой сервер предназначен для списка избранных.
k_unFavoriteFlagHistoryuint320x02Этот избранный игровой сервер предназначен для списка посещённых.
k_unFavoriteFlagNoneuint320x00У этого избранного игрового сервера нет флагов.
STEAMMATCHMAKINGSERVERS_INTERFACE_VERSIONconst char *"SteamMatchMakingServers002"
STEAMMATCHMAKING_INTERFACE_VERSIONconst char *"SteamMatchMaking009"