Xbox Live 통계 리더보드 가져오기

이 문서는 Xbox Live에서 특정 통계에 대한 글로벌 리더보드를 가져오는 함수인 xboxlive_stats_get_leaderboard에 대해 설명합니다. 이 함수를 사용하면 사용자 ID, 통계 문자열, 그리고 리더보드 정보를 가져오기 위한 여러 세부 정보를 제공해야 합니다.

함수 설명

함수 사용법

  • 사용자 ID: xboxlive_get_user() 함수로 반환된 사용자 ID를 사용합니다.
  • 통계 문자열: "Featured Stat"로 등록된 통계 문자열을 입력합니다.
  • 리더보드 정보: 가져오고자 하는 리더보드 정보의 세부 사항을 지정합니다.
중요! 글로벌 리더보드에 사용되는 통계는 XDP/Windows Dev Center에서 "Featured Stats"로 등록되어야 하며, 그렇지 않으면 오류가 발생합니다. 로컬(소셜) 리더보드를 원하신다면 xboxlive_stats_get_social_leaderboard() 함수를 참조하세요.

콜백 및 이벤트

이 함수는 Social Asynchronous Event를 트리거하는 콜백을 생성합니다. 이 이벤트는 다음과 같은 키를 포함하는 DS 맵을 반환합니다:

설명
"id" 상수 achievement_stat_event를 포함합니다.
"event" 문자열 "GetLeaderboardComplete"를 포함합니다.
"userid" 요청과 관련된 사용자 ID입니다.
"error" 성공 시 0, 오류 발생 시 다른 값이 반환됩니다.
"errormessage" 오류 메시지가 있을 경우 문자열로 포함됩니다.
"display_name" 제공자 대시보드에서 정의된 리더보드의 고유 ID입니다.
"numentries" 수신한 리더보드 항목의 수입니다.

리더보드 데이터는 다음 형식으로 포함됩니다:

설명
"PlayerN" 플레이어의 이름 (N은 리더보드 데이터에서의 위치)
"PlayeridN" 플레이어의 고유 사용자 ID (N)
"RankN" 리더보드에서 플레이어의 순위 (N)
"ScoreN" 플레이어의 점수 (N)

함수 구문

xboxlive_stats_get_leaderboard(user_id, stat, num_entries, start_rank, start_at_user, ascending);

인수 설명

인수 타입 설명
user_id Xbox User ID 리더보드를 가져올 사용자 ID입니다.
stat String 글로벌 리더보드를 생성할 통계 문자열입니다.
num_entries Real 가져올 글로벌 리더보드 항목의 수입니다.
start_rank Real 리더보드에서 시작할 순위입니다 (start_at_user가 true일 경우 0 사용).
start_at_user Boolean true로 설정하면 사용자 ID 순위에서 시작합니다. false일 경우는 다른 값 사용.
ascending Boolean true로 설정하면 오름차순, false로 설정하면 내림차순입니다.

확장 예제

다음은 이 함수를 사용하는 확장 예제입니다. Room Start 또는 Create 이벤트에서 호출할 수 있습니다.

xboxlive_stats_get_leaderboard(user_id, "GlobalTime", 20, 1, false, true);

위 코드는 게임의 모든 소셜 리더보드 위치를 가져오기 위해 호출되며, Social Asynchronous Event 콜백을 생성합니다. 이 콜백을 처리하는 방법은 다음과 같습니다:

if (async_load[? "id"] == achievement_stat_event) {
    if (async_load[? "event"] == "GetLeaderboardComplete") {
        global.numentries = async_load[? "numentries"];
        for(var i = 0; i < numentries; i++) {
            global.playername[i] = async_load[? "Player" + string(i)];
            global.playerid[i] = async_load[? "Playerid" + string(i)];
            global.playerrank[i] = async_load[? "Rank" + string(i)];
            global.playerscore[i] = async_load[? "Score" + string(i)];
        }
    }
}

위 코드는 반환된 DS 맵을 확인하고, "id"가 확인된 상수와 일치하는지 확인한 후, 리더보드 데이터로 트리거된 이벤트인지 확인합니다. 그 후, 맵을 반복하여 다양한 값을 여러 글로벌 배열에 저장합니다.