Интерфейс для доступа клиентов к подбору игр, избранным серверам и игровым лобби.
Дополнительная информация доступна в разделе «
Подбор игр и лобби».
Функции-члены
Функции-члены
ISteamMatchmaking
вызываются с помощью глобальной функции доступа
SteamMatchmaking()
.
AddFavoriteGame
int AddFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags, uint32 rTime32LastPlayedOnServer );
Название | Тип | Описание |
nAppID | AppId_t | AppID игры. |
nIP | uint32 | IP-адрес сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001. |
nConnPort | uint16 | Порт, используемый для подключения к серверу, в порядке узлов. |
nQueryPort | uint16 | Порт, используемый для запросов к серверу, в порядке узлов. |
unFlags | uint32 | Задаёт, нужно ли добавить сервер в список избранных или в список посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone. |
rTime32LastPlayedOnServer | uint32 | Это должно быть текущее время в формате UNIX (секунды с 1 января 1970 года). |
Добавляет игровой сервер в локальный список избранных, либо обновляет время игры на сервере, если он уже находится в списке.
Возвращает: int
AddRequestLobbyListCompatibleMembersFilter
void AddRequestLobbyListCompatibleMembersFilter( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | |
Не используется. Проверяет совместимость игрока на основе системы «друг-враг».
AddRequestLobbyListDistanceFilter
void AddRequestLobbyListDistanceFilter( ELobbyDistanceFilter eLobbyDistanceFilter );
Задаёт расстояние, в пределах которых нужно искать лобби (исходя из данных о IP пользователей и карты IP на сервере Steam).
AddRequestLobbyListFilterSlotsAvailable
void AddRequestLobbyListFilterSlotsAvailable( int nSlotsAvailable );
Название | Тип | Описание |
nSlotsAvailable | int | Число мест, которые должны быть открытыми. |
Позволяет показывать в результатах поиска только те лобби, где доступно определённое число мест для игроков.
AddRequestLobbyListNearValueFilter
void AddRequestLobbyListNearValueFilter( const char *pchKeyToMatch, int nValueToBeCloseTo );
Название | Тип | Описание |
pchKeyToMatch | const char * | Ключ фильтра. Не может быть длиннее, чем k_nMaxLobbyKeyLength. |
nValueToBeCloseTo | int | Значение, по которому будут отсортированы лобби. |
Сортирует результаты по степени удалённости от указанного значения.
Близкие фильтры не отфильтровывают значения, а влияют на то, как сортируются результаты. Вы можете указать несколько близких фильтров. Первый из них будет иметь наибольшее влияние, последний — наименьшее.
AddRequestLobbyListNumericalFilter
void AddRequestLobbyListNumericalFilter( const char *pchKeyToMatch, int nValueToMatch, ELobbyComparison eComparisonType );
Название | Тип | Описание |
pchKeyToMatch | const char * | Ключ фильтра. Не может быть длиннее, чем k_nMaxLobbyKeyLength. |
nValueToMatch | int | Число, с которым требуется сравнить. |
eComparisonType | ELobbyComparison | Тип сравнения. |
Задаёт числовой фильтр сравнения следующего вызова
RequestLobbyList.
AddRequestLobbyListResultCountFilter
void AddRequestLobbyListResultCountFilter( int cMaxResults );
Название | Тип | Описание |
cMaxResults | int | Максимальное число возвращаемых лобби. |
Задаёт максимальное число возвращаемых лобби. Чем ниже число, тем быстрее загрузить результаты и информацию о лобби в клиент.
AddRequestLobbyListStringFilter
void AddRequestLobbyListStringFilter( const char *pchKeyToMatch, const char *pchValueToMatch, ELobbyComparison eComparisonType );
Название | Тип | Описание |
pchKeyToMatch | const char * | Ключ фильтра. Не может быть длиннее, чем k_nMaxLobbyKeyLength. |
pchValueToMatch | const char * | Строка, с которой требуется сравнить. |
eComparisonType | ELobbyComparison | Тип сравнения. |
Задаёт строковой фильтр сравнения следующего вызова
RequestLobbyList.
CheckForPSNGameBootInvite
void CheckForPSNGameBootInvite( unsigned int iGameBootAttributes );
Название | Тип | Описание |
iGameBootAttributes | unsigned int | |
Устарело: только для PS3.
CreateLobby
SteamAPICall_t CreateLobby( ELobbyType eLobbyType, int cMaxMembers );
Название | Тип | Описание |
eLobbyType | ELobbyType | Тип и видимость данного лобби. Значения можно изменить позже с помощью SetLobbyType. |
cMaxMembers | int | Максимальное число игроков, которые могут присоединиться к этому лобби. Не может быть больше 250. |
Создаёт новое лобби подбора игр.
Возвращаемые значения: SteamAPICall_t, который необходимо использовать с результатом вызова
LobbyCreated_t.
Активирует обратный вызов
LobbyEnter_t.
Активирует обратный вызов
LobbyDataUpdate_t.
Если полученный результат вызова
LobbyCreated_t показывает успех, значит пользователь присоединился к лобби и оно готово к использованию.
Также будет получен обратный вызов
LobbyEnter_t, поскольку локальный пользователь присоединился к собственному лобби.
DeleteLobbyData
bool DeleteLobbyData( CSteamID steamIDLobby, const char *pchKey );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, для которого требуется удалить метаданные. |
pchKey | const char * | Ключ, для которого требуется удалить данные. |
Удаляет ключ метаданных в лобби.
Это может быть сделано только владельцем лобби.
Данные будут отправлены, только если ключ существовал. Перед отправкой данных есть небольшая задержка, так что вы можете отправить этот вызов несколько раз с необходимыми данными, и они будут автоматически собраны в единый пакет и высланы после последнего вызова.
Возвращаемые значения: bool
true, если ключ/значение удалены. В противном случае
false, если
steamIDLobby
или
pchKey
недействительны.
GetFavoriteGame
bool GetFavoriteGame( int iGame, AppId_t *pnAppID, uint32 *pnIP, uint16 *pnConnPort, uint16 *pnQueryPort, uint32 *punFlags, uint32 *pRTime32LastPlayedOnServer );
Название | Тип | Описание |
iGame | int | Индекс избранного игрового сервера, о котором требуется получить информацию. Значение должно быть в интервале между 0 и GetFavoriteGameCount |
pnAppID | AppId_t * | Возвращает AppID, для которого предназначен данный сервер. |
pnIP | uint32 * | Возвращает IP-адрес сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001. |
pnConnPort | uint16 * | Возвращает порт, используемый для подключения к серверу, в порядке узлов. |
pnQueryPort | uint16 * | Возвращает порт, используемый для запросов к серверу, в порядке узлов. |
punFlags | uint32 * | Сообщает, нужно ли добавить сервер в список избранных или в список посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone. |
pRTime32LastPlayedOnServer | uint32 * | Возвращает время, когда сервер был в последний раз добавлен в список избранных в формате UNIX-времени (секунды с 1 января 1970 года). |
Получает информацию об избранном игровом сервере (по указанному индексу).
ВНИМАНИЕ: вы должны вызвать
GetFavoriteGameCount до того, как выполнить этот вызов.
Возвращает: bool
true, если информация получена.
false, если
iGame
был недопустимым индексом.
См. также: AddFavoriteGame,
RemoveFavoriteGameGetFavoriteGameCount
int GetFavoriteGameCount();
Получает число избранных и недавно посещённых серверов, которые пользователь хранит локально.
Возвращает: int
См. также: AddFavoriteGame,
RemoveFavoriteGameGetLobbyByIndex
CSteamID GetLobbyByIndex( int iLobby );
Название | Тип | Описание |
iLobby | int | Индекс лобби, 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 );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, из которого требуется получить сообщение в чате. Почти всегда этот параметр должен быть LobbyChatMsg_t::m_ulSteamIDUser . |
iChatID | int | Индекс сообщения в чате лобби. Почти всегда этот параметр должен быть LobbyChatMsg_t::m_iChatID . |
pSteamIDUser | CSteamID * | Если задано, возвращает SteamID пользователя, отправившего сообщение. Обычно не требуется, поскольку совпадает с LobbyChatMsg_t::m_ulSteamIDUser . |
pvData | void * | Возвращает данные сообщения, копируя их в этот буфер. Размер буфера должен быть до 4 килобайт. |
cubData | int | Размер буфера, выделяемого для pvData . |
peChatEntryType | EChatEntryType * | Если задано, будет просто возвращать k_EChatEntryTypeChatMsg. Обычно это просто может быть NULL. |
Получает данные сообщения в чате лобби после получения обратного вызова
LobbyChatMsg_t.
Возвращает: int
Число байтов, скопированных в
pvData
.
См. также: SendLobbyChatMsgGetLobbyData
const char * GetLobbyData( CSteamID steamIDLobby, const char *pchKey );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, из которого требуется получить метаданные. |
pchKey | const char * | Ключ, для которого требуется получить значение. |
Получает метаданные, связанные с указанным ключом в указанном лобби.
ВНИМАНИЕ: вы можете получить метаданные только тех лобби, о которых известно клиенту. Это может быть список лобби из
LobbyMatchList_t, полученные данные из
RequestLobbyData или лобби, к которому присоединился клиент.
Возвращает: const char *
Возвращает пустую строку (""), если для ключа не задано значение, либо если параметр
steamIDLobby
недействителен.
GetLobbyDataByIndex
bool GetLobbyDataByIndex( CSteamID steamIDLobby, int iLobbyData, char *pchKey, int cchKeyBufferSize, char *pchValue, int cchValueBufferSize );
Название | Тип | Описание |
steamIDLobby | CSteamID | Это ОБЯЗАТЕЛЬНО должен быть то же лобби, что и в предыдущем вызове GetLobbyDataCount! |
iLobbyData | int | Индекс между 0 и GetLobbyDataCount. |
pchKey | char * | Возвращает название ключа по указанному индексу, которое копируется в буфер. |
cchKeyBufferSize | int | Размер буфера, выделяемого для pchKey . Обычно это должно быть k_nMaxLobbyKeyLength. |
pchValue | char * | Возвращает значение, связанное с ключом по указанному индексу, которое копируется в буфер. |
cchValueBufferSize | int | Размер буфера, выделяемого для pchValue . Обычно это должно быть k_cubChatMetadataMax. |
Получает метаданные лобби (пара ключ-значение) по указанному индексу.
ВНИМАНИЕ: вы должны вызвать
GetLobbyDataCount до того, как выполнить этот вызов.
Возвращает: bool
true при успехе, в противном случае
false, если
steamIDLobby
или
iLobbyData
недействительны.
GetLobbyDataCount
int GetLobbyDataCount( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, из которого требуется получить число записей данных. |
Получает число ключей метаданных для указанного лобби.
ВНИМАНИЕ: вы можете получить метаданные только тех лобби, о которых известно клиенту. Это может быть список лобби из
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 );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, из которого требуется получить информацию об игровом сервере. |
punGameServerIP | uint32 * | Возвращает IP-адрес игрового сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001, если задан. |
punGameServerPort | uint16 * | Возвращает порт соединения игрового сервера в порядке узлов, если задан. |
psteamIDGameServer | CSteamID * | Возвращает SteamID игрового сервера, если задан. |
Получает информацию об игровом сервере, заданном в лобби.
Либо IP и порт, либо SteamID игрового сервера должны быть действительными (в зависимости от того, как вы хотите, чтобы подключались ваши клиенты).
Возвращаемые значения: bool
true, если и лобби, и заданный игровой сервер действительны, в противном случае
false.
См. также: SetLobbyGameServerGetLobbyMemberByIndex
CSteamID GetLobbyMemberByIndex( CSteamID steamIDLobby, int iMember );
Получает SteamID участника лобби по указанному индексу.
ВНИМАНИЕ: вы должны вызвать
GetNumLobbyMembers до того, как выполнить этот вызов.
ВНИМАНИЕ: для получения SteamID других пользователей в этом лобби текущий пользователь должен также находиться в нём.
Возвращает: CSteamIDНедопустимые индексы возвращают
k_steamIDNil.
GetLobbyMemberData
const char * GetLobbyMemberData( CSteamID steamIDLobby, CSteamID steamIDUser, const char *pchKey );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, в котором находится другой игрок. |
steamIDUser | CSteamID | SteamID игрока, для которого требуется получить метаданные. |
pchKey | const char * | Ключ, для которого требуется получить значение. |
Получает метаданные пользователей в указанном лобби от другого игрока.
Они могут быть запрошены только для участников лобби, в которых вы находитесь в настоящий момент.
Возвращаемые значения: const char *
Возвращает
NULL, если
steamIDLobby
недействителен, либо
steamIDUser
не находится в лобби.
Возвращает пустую строку (""), если
pchKey
не задан для игрока.
См. также: SetLobbyMemberDataGetLobbyMemberLimit
int GetLobbyMemberLimit( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, из которого требуется получить лимит участников. |
Текущий лимит на число пользователей, которые могут присоединиться к лобби.
Возвращает
0, если лимит не определён.
Возвращает: int
Возвращает
0, если для указанного лобби нет доступных метаданных.
GetLobbyOwner
CSteamID GetLobbyOwner( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, для которого требуется узнать владельца. |
Возвращает владельца текущего лобби.
ВНИМАНИЕ: для доступа к данным вы должны быть участником лобби.
У лобби всегда один владелец: если текущий владелец выйдет, другой пользователь в лобби станет владельцем автоматически. Возможно (но это случается редко) присоединиться к лобби как раз в тот момент, когда владелец покидает его, тогда вы станете владельцем лобби.
Возвращаемые значения: CSteamIDВозвращает
k_steamIDNil, если вы не находитесь в лобби.
См. также: SetLobbyOwnerGetNumLobbyMembers
int GetNumLobbyMembers( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, для которого требуется узнать число участников. |
Получает число пользователей в лобби.
ВНИМАНИЕ: для получения SteamID других пользователей в этом лобби текущий пользователь должен также находиться в нём.
Используется для итерации. После данного вызова используйте
GetLobbyMemberByIndex для получения SteamID всех участников лобби. Информация о других участниках лобби (имя, аватар и т. д.) получается автоматически и доступна с помощью интерфейса
ISteamFriends.
Возвращает: int
Число участников лобби,
0 если у текущего пользователя нет данных из лобби.
InviteUserToLobby
bool InviteUserToLobby( CSteamID steamIDLobby, CSteamID steamIDInvitee );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, в который приглашается пользователь. |
steamIDInvitee | CSteamID | SteamID приглашаемого пользователя. |
Приглашает другого пользователя в лобби.
Если указанный пользователь нажимает «Присоединиться», если пользователь находится в игре, будет отправлен обратный вызов
GameLobbyJoinRequested_t.
Если игра ещё не запущена, тогда она будет автоматически запущена с параметром командной строки
+connect_lobby <64-bit lobby Steam ID>
.
Возвращает: bool
true, если приглашение отправлено. В противном случае
false, если локальный пользователь не находится в лобби, не удалось подключиться к Steam или указанный ID пользователя оказался недействительным.
ВНИМАНИЕ: этот вызов не проверяет, принял ли пользователь приглашение.
JoinLobby
SteamAPICall_t JoinLobby( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, в которое требуется войти. |
Присоединяется к существующему лобби.
SteamID лобби может быть получен из поиска с помощью
RequestLobbyList, при присоединении к другу или из приглашения.
Возвращает: SteamAPICall_t, который необходимо использовать с результатом вызова
LobbyEnter_t.
Активирует обратный вызов
LobbyDataUpdate_t.
LeaveLobby
void LeaveLobby( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | Лобби, которое необходимо покинуть. |
Выходит из лобби, в котором пользователь находится в данный момент. На стороне клиента это происходит незамедлительно, другие пользователи в лобби будут оповещены с помощью обратного вызова
LobbyChatUpdate_t.
RemoveFavoriteGame
bool RemoveFavoriteGame( AppId_t nAppID, uint32 nIP, uint16 nConnPort, uint16 nQueryPort, uint32 unFlags );
Название | Тип | Описание |
nAppID | AppId_t | AppID игры. |
nIP | uint32 | IP-адрес сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001. |
nConnPort | uint16 | Порт, используемый для подключения к серверу, в порядке узлов. |
nQueryPort | uint16 | Порт, используемый для запросов к серверу, в порядке узлов. |
unFlags | uint32 | Добавлен ли сервер в список избранных или в список посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone. |
Удаляет игровой сервер из локального списка избранных.
Возвращает: bool
true, если сервер удалён. В противном случае
false, если указанный сервер не был в списке избранных.
RequestLobbyData
bool RequestLobbyData( CSteamID steamIDLobby );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, для которого требуется обновить метаданные. |
Обновляет все метаданные для лобби, в котором вы не находитесь сейчас.
Для тех лобби, в которых вы являетесь участником это не требуется, для них данные всегда будут актуальными. Эту функцию можно использовать для обновления информации о лобби, полученных от
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 );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, в которое требуется отправить сообщение. |
pvMsgBody | const void * | Это может быть текст или двоичные данные размером до 4 килобайт. |
cubMsgBody | int | Размер 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 );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID первичного лобби. |
steamIDLobbyDependent | CSteamID | SteamID, который будет привязан к первичному лобби. |
Не используется. Связывает два лобби в целях проверки совместимости игрока и использованием системы друг-враг.
Необходимо быть владельцем обоих лобби.
Возвращает: bool
true, если запрос отправлен на серверы Steam.
false, если локальный пользователь не является владельцем обоих лобби или не удалось подключиться к Steam.
SetLobbyData
bool SetLobbyData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, для которого требуется задать метаданные. |
pchKey | const char * | Ключ, для которого требуется задать данные. Не может быть длиннее, чем k_nMaxLobbyKeyLength. |
pchValue | const char * | Значение, которое необходимо задать. Не может быть длиннее, чем k_cubChatMetadataMax. |
Задаёт пару ключ-значение метаданных лобби. Может использоваться для указания названия лобби, текущей карты, игрового режима и т. п.
Это может быть сделано только владельцем лобби. Участники лобби должны использовать
SetLobbyMemberData.
Каждый пользователь в лобби получит уведомление об изменении данных лобби с помощью обратного вызова
LobbyDataUpdate_t, а присоединяющиеся к лобби новые пользователи получат существующие данные.
Данные будут отправлены, только если они изменены. Перед отправкой данных есть небольшая задержка, так что вы можете отправить этот вызов несколько раз с необходимыми данными, и они будут автоматически собраны в единый пакет и высланы после последнего вызова.
Возвращаемые значения: bool
true, если данные заданы.
false, если
steamIDLobby
недействителен или ключ или значение слишком длинны.
SetLobbyGameServer
void SetLobbyGameServer( CSteamID steamIDLobby, uint32 unGameServerIP, uint16 unGameServerPort, CSteamID steamIDGameServer );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, из которого требуется задать информацию об игровом сервере. |
unGameServerIP | uint32 | Задаёт IP-адрес игрового сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001. |
unGameServerPort | uint16 | Задаёт порт соединения игрового сервера в порядке узлов. |
steamIDGameServer | CSteamID | Задаёт SteamID игрового сервера. Используйте k_steamIDNil, если задать этот параметр не требуется. |
Задаёт игровой сервер, связанный с лобби.
Это может быть сделано только владельцем лобби.
Либо IP и порт, либо SteamID игрового сервера должны быть действительными (в зависимости от того, как вы хотите, чтобы подключались ваши клиенты).
Всем игрокам в лобби будет отправлен обратный вызов
LobbyGameCreated_t, обычно в этот момент игроки присоединятся к указанному игровому серверу.
Возвращаемые значения: void
Активирует обратный вызов
LobbyGameCreated_t.
См. также: GetLobbyGameServerSetLobbyJoinable
bool SetLobbyJoinable( CSteamID steamIDLobby, bool bLobbyJoinable );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби. |
bLobbyJoinable | bool | Зарешить (true) или запретить (false) пользователям присоединяться к лобби? |
Устанавливает, могут ли другие игроки присоединиться к лобби. По умолчанию для новых лобби — могут.
Если запретить присоединяться, никакие другие игроки не смогут присоединиться, даже если это друзья или им отправлено приглашение.
Лобби, к которым запрещено присоединяться, не возвращаются при поиске лобби.
Возвращаемые значения: bool
true при успехе, в противном случае
false, если вы не являетесь владельцем лобби.
SetLobbyMemberData
void SetLobbyMemberData( CSteamID steamIDLobby, const char *pchKey, const char *pchValue );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, в котором требуется задать метаданные. |
pchKey | const char * | Ключ, для которого требуется задать данные. Не может быть длиннее, чем k_nMaxLobbyKeyLength. |
pchValue | const char * | Значение, которое необходимо задать. Не может быть длиннее, чем k_cubChatMetadataMax. |
Задаёт метаданные каждого игрока в лобби для локального игрока.
Каждый пользователь в лобби получит уведомление об изменении данных лобби с помощью обратного вызова
LobbyDataUpdate_t, а присоединяющиеся к лобби новые пользователи получат существующие данные.
Перед отправкой данных есть небольшая задержка, так что вы можете отправить этот вызов несколько раз с необходимыми данными, и они будут автоматически собраны в единый пакет и высланы после последнего вызова.
Возвращает: void
Активирует обратный вызов
LobbyDataUpdate_t.
См. также: GetLobbyMemberDataSetLobbyMemberLimit
bool SetLobbyMemberLimit( CSteamID steamIDLobby, int cMaxMembers );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, для которого требуется задать лимит участников. |
cMaxMembers | int | Максимальное число игроков, разрешённых в этом лобби. Не может быть больше 250. |
Задаёт максимальное число игроков, которые могут присоединиться к этому лобби.
Это также задаётся при создании лобби с помощью
CreateLobby.
Это может быть сделано только владельцем лобби.
Возвращает: bool
true, если лимит задан.
false, если вы не являетесь владельцем указанного лобби.
SetLobbyOwner
bool SetLobbyOwner( CSteamID steamIDLobby, CSteamID steamIDNewOwner );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, где произойдут изменения. |
steamIDNewOwner | CSteamID | SteamID пользователя, который станет новым владельцем лобби. Он должен находиться в лобби. |
Меняет владельца лобби.
Это может быть сделано только владельцем лобби. Активирует
LobbyDataUpdate_t для всех пользователей в лобби, каждый пользователь должен обновить локальное состояние лобби. Обычно новый владелец отображается при помощи иконки короны, показываемой рядом с его именем.
Возвращает: bool
Активирует обратный вызов
LobbyDataUpdate_t.
true, если владелец изменён.
false, если вы не являетесь текущим владельцем лобби,
steamIDNewOwner
не является участником лобби, либо если не удалось установить соединение со Steam.
См. также: GetLobbyOwnerSetLobbyType
bool SetLobbyType( CSteamID steamIDLobby, ELobbyType eLobbyType );
Название | Тип | Описание |
steamIDLobby | CSteamID | SteamID лобби, для которого требуется задать тип. |
eLobbyType | ELobbyType | Задаваемый новый тип лобби. |
Обновляет тип лобби.
Это также задаётся при создании лобби с помощью
CreateLobby.
Это может быть сделано только владельцем лобби.
Возвращает: bool
true при успехе, в противном случае
false, если вы не являетесь владельцем лобби.
Обратные вызовы
Далее приведён список обратных вызовов, которые могут быть получены при вызове
SteamAPI_RunCallbacks. Многие из них могут быть получены сразу в ответ на функции-члены
ISteamMatchmaking
.
FavoritesListAccountsUpdated_t
Название | Тип | Описание |
m_eResult | EResult | |
FavoritesListChanged_t
Сервер добавлен в список избранных или удалён из него, обновите его.
Название | Тип | Описание |
m_nIP | uint32 | Если равно 0, IP будет означать весь список. Любое другое значение означает только один сервер. В порядке узлов, к примеру, 127.0.0.1 == 0x7f000001. |
m_nQueryPort | uint32 | Если параметр m_nIP задан, то это новый порт запросов сервера, в порядке узлов. |
m_nConnPort | uint32 | Если параметр m_nIP задан, то это новый порт соединения сервера, в порядке узлов. |
m_nAppID | uint32 | Если параметр m_nIP задан, то это AppID, к которому принадлежит игровой сервер. |
m_nFlags | uint32 | Если параметр m_nIP задан, этот параметр возвращает, находится ли сервер в списке избранных или в списке посещённых серверов. Дополнительная информация доступна здесь: k_unFavoriteFlagNone. |
m_bAdd | bool | Если параметр m_nIP задан, это значение показывает, добавлен сервер в список (true) или удалён из него (false). |
m_unAccountId | AccountID_t | |
LobbyChatMsg_t
Получено сообщение в чате (текстовое или двоичное). После получения этого обратного вызова для получения содержимого сообщения необходимо использовать
GetLobbyChatEntry.
Название | Тип | Описание |
m_ulSteamIDLobby | uint64 | SteamID лобби, в котором отправлено это сообщение. |
m_ulSteamIDUser | uint64 | SteamID пользователя, отправившего сообщение. Обратите внимание, что это мог быть и локальный пользователь. |
m_eChatEntryType | uint8 | Тип полученного сообщения. Это фактически EChatEntryType. |
m_iChatID | uint32 | Индекс сообщения чата для использования с GetLobbyChatEntry. Недействителен вне контекста этого обратного вызова, поэтому хранить его нельзя. |
Связанные функции: SendLobbyChatMsgLobbyChatUpdate_t
Состояние чата в лобби изменилось, обычно отправляется, когда пользователь присоединился или покинул лобби.
Название | Тип | Описание |
m_ulSteamIDLobby | uint64 | SteamID лобби. |
m_ulSteamIDUserChanged | uint64 | Пользователь, чей статус в лобби изменился. Может быть и получатель. |
m_ulSteamIDMakingChange | uint64 | Участник лобби, внёсший изменения. Это значение может отличаться от m_ulSteamIDUserChanged , если пользователя выгоняют, заглушают и т. п. К примеру, если один пользователь выгоняет другого из лобби, это будет ID выгоняющего пользователя. |
m_rgfChatMemberStateChange | uint32 | Битовое поле для значений EChatMemberStateChange. |
LobbyCreated_t
Результат нашего запроса на создание лобби. В этот момент пользователи уже присоединились к лобби, оно готово к использованию, а также будет получен обратный вызов
LobbyEnter_t (поскольку локальный пользователь присоединяется к собственному лобби).
Название | Тип | Описание |
m_eResult | EResult | Результат операции.
Возможные значения:
|
m_ulSteamIDLobby | uint64 | SteamID созданного лобби, если произошёл сбой — 0. |
Связанные функции: CreateLobbyLobbyDataUpdate_t
Метаданные лобби изменились.
Если
m_ulSteamIDMember
— пользователь в лобби, тогда используйте
GetLobbyMemberData для получения данных пользователя. В противном случае, если
m_ulSteamIDMember
==
m_ulSteamIDLobby
, используйте
GetLobbyData для получения метаданных лобби.
Название | Тип | Описание |
m_ulSteamIDLobby | uint64 | SteamID лобби. |
m_ulSteamIDMember | uint64 | SteamID либо участника, чьи данные изменились, либо самой комнаты. |
m_bSuccess | uint8 | true, если данные лобби изменены, в противном случае false. |
Связанные функции: CreateLobby,
JoinLobby,
SetLobbyMemberData,
RequestLobbyData,
SetLobbyOwnerLobbyEnter_t
Получается после попытки войти в лобби. Метаданные лобби доступны для использования после получения этого обратного вызова.
Связанные функции: CreateLobby,
JoinLobbyLobbyGameCreated_t
Игровой сервер задан с помощью
SetLobbyGameServer, все участники лобби могут присоединиться. Отдельные клиенты самостоятельно принимают решение о том, что делать. Обычное игровое поведение заключается в том, чтобы выйти из лобби и подключиться к указанному игровому серверу. Но при желании лобби может открываться открытым на протяжении всей сессии.
Название | Тип | Описание |
m_ulSteamIDLobby | uint64 | Лобби, задавшее игровой сервер. |
m_ulSteamIDGameServer | uint64 | SteamID игрового сервера, если задан. |
m_unIP | uint32 | IP-адрес игрового сервера в порядке узлов, к примеру, 127.0.0.1 == 0x7f000001, если задан. |
m_usPort | uint16 | Порт соединения игрового сервера в порядке узлов, если задан. |
Связанные функции: SetLobbyGameServerLobbyInvite_t
Кто-то приглашает вас в лобби. При обычных обстоятельствах вам ничего не нужно делать, поскольку интерфейс Steam покажет уведомление и сообщение вида «пользователь <user> пригласил вас в лобби, присоединиться?».
Если пользователь за пределами игры решает присоединиться, игра будет автоматически запущена с параметром командной строки
+connect_lobby <64-bit lobby id>
, или если он уже в игре — с обратным вызовом
GameLobbyJoinRequested_t.
Название | Тип | Описание |
m_ulSteamIDUser | uint64 | SteamID пользователя, отправившего приглашение. |
m_ulSteamIDLobby | uint64 | SteamID лобби, куда мы приглашены. |
m_ulGameID | uint64 | GameID лобби, куда мы приглашены. |
LobbyKicked_t
В данный момент не используется! Если вам нужно реализовать изгнание, создайте особый пакет, отправляемый с
SendLobbyChatMsg. Когда пользователь получает этот пакет, он должен вызвать
LeaveLobby.
Название | Тип | Описание |
m_ulSteamIDLobby | uint64 | |
m_ulSteamIDAdmin | uint64 | |
m_bKickedDueToDisconnect | uint8 | |
LobbyMatchList_t
Результат при запросе списка лобби. Вы должны выполнить итерацию по списку с помощью
GetLobbyByIndex с индексами от 0 до
m_nLobbiesMatching
-1.
Название | Тип | Описание |
m_nLobbiesMatching | uint32 | Число лобби со SteamID, которые удовлетворяли критериям поиска. |
Связанные функции: RequestLobbyListPSNGameBootInviteResult_t
Устарело: только для PS3.
Название | Тип | Описание |
m_bGameBootInviteExists | bool | |
m_steamIDLobby | CSteamID | |
Перечисления
Далее приведён список перечислений, которые определены для использования с ISteamMatchmaking.
EChatMemberStateChange
Флаги, описывающие, как изменилось состояние пользовательского лобби. Предоставляются в
LobbyChatUpdate_t.
Название | Значение | Описание |
k_EChatMemberStateChangeEntered | 0x0001 | Пользователь присоединился или присоединяется к лобби. |
k_EChatMemberStateChangeLeft | 0x0002 | Пользователь покинул или покидает лобби. |
k_EChatMemberStateChangeDisconnected | 0x0004 | Пользователь отсоединён, не покинув сначала лобби. |
k_EChatMemberStateChangeKicked | 0x0008 | Пользователь выгнан. |
k_EChatMemberStateChangeBanned | 0x0010 | Пользователь выгнан и заблокирован. |
ELobbyComparison
Опции фильтра поиска лобби. Может быть задано
AddRequestLobbyListStringFilter и
AddRequestLobbyListNearValueFilter.
Название | Значение | Описание |
k_ELobbyComparisonEqualToOrLessThan | -2 | Значение лобби должно быть равно или меньше данного. |
k_ELobbyComparisonLessThan | -1 | Значение лобби должно быть меньше данного. |
k_ELobbyComparisonEqual | 0 | Значение лобби должно быть равно данному. |
k_ELobbyComparisonGreaterThan | 1 | Значение лобби должно быть больше данного. |
k_ELobbyComparisonEqualToOrGreaterThan | 2 | Значение лобби должно быть равно или больше данного. |
k_ELobbyComparisonNotEqual | 3 | Значение лобби должно быть не равно данному. |
ELobbyDistanceFilter
Фильтры дистанции поиска лобби при запросе списка лобби. Результаты фильтруются от ближайшего к дальнейшему. Может быть задано с помощью
AddRequestLobbyListDistanceFilter.
Название | Значение | Описание |
k_ELobbyDistanceFilterClose | 0 | Возвращаются лобби только непосредственно из этого региона. |
k_ELobbyDistanceFilterDefault | 1 | Возвращаются лобби только из этого и соседних регионов. |
k_ELobbyDistanceFilterFar | 2 | В играх с мягкими требованиями к задержке возвращаются лобби примерно с половины окружности земного шара. |
k_ELobbyDistanceFilterWorldwide | 3 | Без фильтра. Будут подобраны лобби и в Индии, и в Нью-Йорке (не рекомендуется, задержка будет достигать нескольких секунд. |
ELobbyType
Указывает тип лобби, задаётся с помощью
CreateLobby и
SetLobbyType.
Название | Значение | Описание |
k_ELobbyTypePrivate | 0 | Присоединиться к лобби можно только по приглашению. |
k_ELobbyTypeFriendsOnly | 1 | Присоединиться могут друзья и приглашённые, но в списке лобби не показывается. |
k_ELobbyTypePublic | 2 | Показывается друзьям и при поиске. |
k_ELobbyTypeInvisible | 3 | Показывается при поиске, но не другим. Используется, если вы хотите, чтобы пользователь находился в двух лобби, к примеру, для сопоставления групп. Пользователь может находиться только в одном обычном лобби и в двух невидимых лобби. |
Typedefs
Далее приведён список объявлений typedef, которые определены для использования с ISteamMatchmaking.
Название | Базовый тип | Описание |
HServerListRequest | void* | Дескриптор, получаемый при запросе списка серверов. |
HServerQuery | int | Дескриптор, получаемый при запросе информации об отдельном сервере. |
Константы
Далее приведён список констант, которые определены для использования с ISteamMatchmaking.
Название | Тип | Значение | Описание |
HSERVERQUERY_INVALID | int | 0xffffffff | |
k_nMaxLobbyKeyLength | int | 255 | Максимальный размер ключа метаданных лобби. |
k_unFavoriteFlagFavorite | uint32 | 0x01 | Этот избранный игровой сервер предназначен для списка избранных. |
k_unFavoriteFlagHistory | uint32 | 0x02 | Этот избранный игровой сервер предназначен для списка посещённых. |
k_unFavoriteFlagNone | uint32 | 0x00 | У этого избранного игрового сервера нет флагов. |
STEAMMATCHMAKINGSERVERS_INTERFACE_VERSION | const char * | "SteamMatchMakingServers002" | |
STEAMMATCHMAKING_INTERFACE_VERSION | const char * | "SteamMatchMaking009" | |