무관련자

API overview

추가 링크와 정보를 사용하려면 여기에서 가입하고 계정에 로그인하십시오.
 Steamworks는 게임에 사용할 수 있는 다양한 기능과 솔루션을 제공합니다. 다음의 개요는 핵심적인 기능과 그 구현 방법을 하나씩 소개합니다. Steamworks 계정을 생성하고 이 사이트에 로그인하면 더 자세한 내용을 확인할 수 있습니다.

통계 및 도전 과제

헤더: ISteamUserStats.h

Steam 통계 및 도전 과제 API를 이용하면 손쉽게 도전 과제 및 통계를 지속적으로 추적하여 게임의 사용자에게 제공할 수 있습니다.

Steam 통계 및 도전 과제에 대한 문서 페이지를 참고하십시오.


사용자 인증 및 소유권

헤더: steam_gameserver.h, ISteamGameServer.h, ISteamUser.h

Steamworks는 게임 클라이언트, 게임 서버, 웹사이트에서 Steam 사용자를 인증하는 다양한 방법을 제공합니다.

사용자 인증 밎 소유권에 대한 문서 페이지를 참고하십시오.


매칭

헤더: ISteamMatchmaking.h, ISteamGameServer.h, ISteamMasterServerUpdater.h

매칭 기능을 통해 사용자는 서버 목록을 통해 기존 게임을 찾거나, 로비에서 여러 사용자와 함께 새 게임을 시작할 수 있습니다. 로비 기반의 매칭을 사용하는 방법에 대한 자세한 내용은 P2P 매칭을 참고하십시오.

매칭에는 게임 서버 구성 요소와 게임 클라이언트 구성 요소가 모두 존재합니다. 게임 서버(전용 서버일 수도 있고 다른 사용자의 접속을 허용하는 클라이언트일 수도 있습니다)는 서버에 대한 정보를 Steam 서버(마스터 서버)에 게시할 수 있습니다. 서버 이름, 플레이어 수, 맵/시나리오 이름, IP 주소를 공유할 수 있습니다. 이 내용은 ISteamMasterServerUpdater 인터페이스에 상세히 설명되어 있습니다. 그러면 게임 클라이언트가 ISteamMatchmakingServers 인터페이스를 사용하여 이 게임 서버의 목록을 가져옵니다. 이 인터페이스는 우선 SteamMatchmakingServers()->Request*() 함수 내의 서버를 경유하여 마스터 서버에 원하는 서버 종류에 대한 기본 목록을 요청합니다.

가져올 수 있는 서버 목록의 종류는 다음과 같습니다.
  • Internet server list - 공개 인터넷을 통해 호스팅되며 인터넷으로 액세스할 수 있는 게임 서버
  • LAN server list - UDP 브로드캐스트를 통해 로컬 C 클래스 네트워크에서 찾을 수 있는 게임 서버
  • Friends server list - 친구들이 현재 게임을 플레이하고 있는 게임 서버
  • Favorites server list - 현재 사용자가 즐겨찾기로 지정한 게임 서버
  • History server list - 현재 사용자가 최근에 접속하여 플레이한 게임 서버
  • Spectator server list - 특수 '관전' 모드로 표시된 게임 서버. 즉, 실제로는 사용자가 릴레이를 통해 각종 멀티플레이어 게임을 관전할 수 있게 해 주는 프록시입니다.
그 결과물은 (때로는 방대한) 게임 서버 목록입니다. 목록을 받으면 게임 클라이언트가 콜백을 받습니다. 최초의 결과는 쿼리할 IP 주소의 단순 목록으로, 게임 서버와 요청 클라이언트의 거리에 따라 반환됩니다.

그다음 클라이언트는 각 서버에 대한 추가 정보를 요청하여, 상세한 서버 정보와 해당 서버의 핑 시간을 가져올 수 있습니다. 서버에 정보를 쿼리하는 데는 시간이 걸릴 수 있으므로(초당 50~100개의 서버를 쿼리할 수 있습니다), 대부분의 게임은 정보가 도착하는 대로 표시하는 방법을 택합니다.

Steam 클라이언트의 내장 서버 브라우저를 통해 게임 서버에 대한 기본 정보를 확인하고 서버에 접속할 수도 있지만, 이 브라우저가 표시하는 정보는 제한적이므로 게임 접속 시 부차 수단으로 사용해야 합니다. 게임 내의 서버 브라우저를 일차 수단으로 사용하십시오.

참고:
  • 사용자가 Steam 클라이언트의 서버 브라우저 또는 친구 목록을 통해 게임에 접속하려 하면, Steam은 "+connect <ip:port>" 매개변수로 게임을 실행합니다.
  • 게임 서버에 비밀번호가 필요하다는 플래그가 붙은 경우에는, 명령줄에 "+password <password>" 명령줄이 추가될 것입니다.
  • 게임이 이미 실행 중이라면 Steam은 게임에 GameServerChangeRequested_t 콜백 신호를 전송합니다. 이 신호는 필요에 따라 IP 주소와 포트 정보를 담고 있습니다.


커뮤니티

헤더: ISteamFriends.h, ISteamUtils.h

Steam 커뮤니티 API는 시스템 내 다른 플레이어들의 정보에 액세스하기 위한 일련의 함수입니다. 사용자에 대해 쿼리할 수 있는 데이터의 종류는 다음과 같습니다.
  • SteamID - 시스템 내에서 사용자를 식별하는 데 사용되는 고유 값
  • Persona name - 사용자의 별명 / 표시 이름 / 플레이어 이름
  • Persona state - 오프라인 또는 온라인
  • Avatar - 해당 사용자의 이미지
  • Game info - 사용자가 실행 중인 게임, 접속 중인 게임 서버 등
  • Clan memberships - 사용자가 가입한 그룹
API는 로컬 사용자가 접촉한 적이 있는 사용자에 대한 정보만 보관합니다. 사용자는 친구, 로비에 함께 있는 사용자, 같은 그룹에 속한 사용자의 상태를 항상 확인할 수 있습니다. 사용자는 또한 게임 서버가 Steam에 연결되어 있으며 멀티플레이어 인증 API를 사용하고 있다면, 해당 게임 서버 내의 다른 사용자에 대한 정보도 확인할 수 있습니다. 각각의 개체(사용자, 게임 서버, 로비, 클랜)는 모두 SteamID로 참조할 수 있습니다. 이 개체의 종류는 CSteamID::GetAccountType()를 호출해서 파악할 수 있습니다.

이 다양한 그룹 내의 사용자 정보를 가져오려면 SteamFriends()->GetFriendCountFromSource() / SteamFriends()->GetFriendFromSourceByIndex() 함수를 사용하십시오. 여기서 참조하는 '소스'는 구성원 목록을 받고자 하는 게임 서버, 로비, 클랜의 SteamID입니다. 예를 들어, 로비 내의 모든 사용자에 대한 정보를 가져오려면 다음과 같이 하면 됩니다.

CSteamID steamIDLobby = steamIDLobbyWeHaveGottenPreviously;
int cLobbyMembers = SteamFriends()->GetFriendCountFromSource( steamIDLobby );
for ( int i = 0; i < cLobbyMembers; i++ )
{
  CSteamID steamIDLobbyMember = SteamFriends()->GetFriendFromSourceByIndex( steamIDLobby, i );
  const char *pchName = SteamFriends()->GetPersonaName( steamIDLobbyMember );
  ...
}

게임 서버 사용자, 클랜 구성원을 확인할 때도 같은 방법을 사용합니다.

로컬 사용자의 친구 정보를 가져오려면 GetFriendCount()GetFriendByIndex()를 사용하십시오. 특정 사용자가 친구인지 빠르게 확인하려면(예를 들어 점수판에서 친구에게만 특별한 표시를 하는 용도로) SteamFriends()->HasFriend()를 사용하십시오. 이 세 가지 함수는 모두 일련의 친구 플래그를 받아들입니다. 이는 ISteamFriends.h 상단에서 정의되는 enum 상수로, 반환할 사용자 집단을 제어할 수 있게 해 줍니다.

모든 프로필 이름은 UTF-8 형식으로 반환됩니다. 게임의 코드 베이스에서 현지화 텍스트에 확장 문자(UTF-16)를 사용한다면 CP_UTF8 코드 페이지와 함께 MultiByteToWideChar()를 사용하여 변환하십시오.

사용자의 아바타는 int형으로 반환되며 이 값은 고유한 텍스처 ID입니다. SteamUtils()->GetImageSize() / SteamUtils()->GetImageRGBA() 함수가 이 텍스처 ID를 받아 텍스처 데이터를 RBGA 스트림으로 반환합니다.

커뮤니티 API에서 가장 자주 전달되는 콜백은 PersonaStateChanged_t입니다. 이 콜백은 기존 또는 신규 사용자에 대한 새로운 정보가 접수될 때마다 호출됩니다. 일반적으로는 로컬 사용자의 친구가 이름, 아바타, 또는 온라인 상태를 변경하는 경우이지만, 보다 흥미로운 경우는 로비 또는 게임 서버에 접속하는 경우입니다. 이 경우에는 다음의 시퀀스가 발생합니다.
  • 로컬 사용자가 로비에 입장합니다
  • 로컬 사용자가 로비 내 다른 사용자의 SteamID 목록을 받습니다
  • 처음에는 로컬 사용자가 다른 사용자에 대해 전혀 모르며, 서버에 쿼리를 해야 합니다
  • 로컬 사용자가 (보통 이름부터) 정보를 받으면, PersonaStateChanged_t 콜백이 이름 변경이라는 플래그와 함께 게임에 전달됩니다.
  • 이 시점에 아바타 정보 또한 다운로드되며 이 정보는 용량이 크므로 시간이 몇 초 걸릴 수 있습니다. 다운로드가 완료되면 PersonaStateChanged_t가 또 한 번 전달되어 아바타 변경을 알립니다.
사용자는 이름 또는 아바타를 언제든지 변경할 수 있으므로, 귀하의 UI는 이러한 업데이트를 처리할 수 있어야 합니다. 일반적인 방식은, 사용자 정보를 표시하는 UI 위젯을 모두 PersonaStateChanged_t 콜백에 등록하여 변경 사항을 업데이트하는 것입니다.

그 외에도 커뮤니티와 직결된 것은 아니지만 유용한 함수 두어 가지가 여기에 공개되어 있습니다.

게임이 PTT 음성을 지원하는 경우에는 사용자가 발언 버튼을 누르고 놓을 때마다 SteamFriends()->SetInGameVoiceSpeaking()를 호출해야 합니다. 이는 친구 시스템을 통하는 음성 대화 중 억제해야 하는 대화를 Steam 클라이언트에 알려 줍니다. 사용자가 음성을 두 가지 소스로 전송하는 일을 방지하기 위해서입니다.

게임에서 Steam 오버레이를 통해 대화를 활성화하고 싶다면 SteamFriends()->ActivateGameOverlay() 함수를 사용하십시오. 이 함수는 대화의 이름을 받아들여 대화를 열고, 이름이 지정되지 않은 경우에는 오버레이를 활성화합니다. 자세한 내용은 ISteamFriends.h를 참고하십시오.


P2P 네트워킹

헤더: ISteamNetworking.h

Steam 네트워킹 API는 일련의 간단한 함수로서, 게임이 두 명의 Steam 사용자 사이에서 데이터를 직접 전송하도록 해 줍니다. 이 API는 가정용 NAT 뒤에서 연결할 때 libjingle NAT 펀칭 라이브러리를 사용하거나, 직접 연결이 불가능한 경우 Steam 릴레이 서버를 경유합니다.
Steam P2P 네트워킹에 대한 문서 페이지를 참고하십시오.

Steam 클라우드

헤더: ISteamRemoteStorage.h

Steam Cloud API는 게임에, 그리고 플레이어에게 플레이어가 컴퓨터를 옮겨도 따라다니는 파일 스토리지를 제공합니다. 게임 설정, 게임 저장 파일, 기타 사용자 고유 데이터를 Steam 클라우드에 복제하여 플레이어에게 연속적이고 매끄러운 경험을 제공할 수 있습니다.

Steam 클라우드 사용 방법은 간단합니다. API를 통해 문제의 파일을 읽고 쓰기만 하면 됩니다.
Steam 클라우드 원격 파일 스토리지에 대한 문서 페이지를 참고하십시오.

Valve 안티 치트(VAC)

멀티플레이어 및 인증 헤더 steam_gameserver.h, ISteamGameServer.h, ISteamUser.h를 참고하십시오.

VAC Steamworks C++ API 구현은 간단하며 복잡한 작업은 Steam이 처리해 줍니다. 이 방법의 장점은 게임 클라이언트가 직접 치트 감지를 처리하지 않는다는 점입니다. 게임에서 해야 할 작업은 API를 사용하여 해당 사용자의 VAC 차단 여부를 확인하는 것입니다.

VAC는 Steamworks 및 Steam 클라이언트의 구성 요소이며, 게임이 실행 중일 때 사용자의 시스템에서 치트 프로그램을 스캔합니다. 바이러스 스캔 프로그램과 유사하게 동작하며, 알려진 치트의 데이터베이스를 보유하고 있습니다.

음성


Steamworks는 NAT 장치를 통한 P2P 연결 기술을 포함하는 게임 내 음성 대화 솔루션을 제공합니다. 이로써 플레이어들은 신뢰할 수 있는 프레임워크를 통해 서로 교류할 수 있습니다.

또한, Steam 커뮤니티의 음성 대화 기능을 사용하면 어느 게임에서나 대화를 나눌 수 있습니다.

DRM


Steamworks 디지털 권리 관리(DRM)는 컴파일이 완료된 게임 실행 파일을 래핑하여, Steam 인증 하에 게임이 실행되는지 확인합니다. 이 DRM 솔루션은 Half-Life 2와 Counter-Strike 등의 게임을 보호하는 데 사용된 솔루션과 동일합니다. 소스. Steamworks DRM은 충분한 테스트를 거쳤으며 고객친화적입니다.

Steamworks는 DRM 솔루션과 더불어, 전 세계 상점에 암호화된 디스크를 배송하는 출시일 게임 보호 기능을 제공합니다. 출시를 결정하는 순간까지 게임의 암호화가 유지되므로, 제조 과정에서 조기에 게임이 유출될 우려가 없습니다. 완성 데이터 또는 골드 마스터를 저희에게 넘겨 주시면 보호 기능을 사용할 수 있습니다.

 

Valve 대외비

이 사이트는 접속이 제한되어 있으며 여기에 제공된 컨텐츠(코드, 문서, 등)는 모두 Valve 기밀 정보입니다. 이 사이트에 접속하거나 사용하려면 기밀 정보에 관해 Valve와 비밀 유지 계약과 사용권 계약을 체결해야 합니다.