전체 플레이어 세그먼트에 대한 대량 조치

이 자습서에서는 세그먼트의 모든 플레이어에 대해 하나 이상의 동작을 수행하는 작업을 만드는 데 필요한 단계를 설명합니다.

작업은 게임에 대한 라이브 작업의 중요한 부분입니다. 작업은 플레이어를 참여시키는 데 사용할 수 있는 강력한 도구 집합을 제공합니다.

예를 들면 다음과 같습니다.

  • 지난 2주 동안 로그인한 플레이어에게 특별한 새해 선물을 드립니다.
  • 지난 주에 돈을 쓴 플레이어에게(지출 단계 기준) 보상을 합니다. 지출액이 높을수록 선물을 가치도 높아집니다.
  • 최근에 게임 버그로 인해 영향을 받은 모든 플레이어의 손상된 플레이어 상태를 수정합니다.

이 자습서에서는 Unicorn Battle 샘플 앱을 기반으로 2,725 XP 이상의 모든 플레이어에게 특별한 선물을 드립니다.

필수 조건

이 자습서를 실행하려면 Unicorn Battle 샘플 앱을 설치해야 합니다. 자세한 내용은 PlayFab의 블로그에서 확인하거나 GitHub 저장소로 직접 이동하여 해당 지침을 따르세요.

Unicorn Battle - 시작 화면

2,725 XP 포인트에 도달하는 레벨 2 이상으로 캐릭터를 레벨 업하려면 여러 번 전투를 수행해야 합니다.

Unicorn Battle - 레벨 2

1단계 - 세그먼트 만들기

첫 번째 단계는 이 동작의 영향을 받을 플레이어 그룹을 정의하는 세그먼트를 만드는 것입니다. 이 경우 2,725 XP 이상의 모든 플레이어로 정의되는 높은 XP 세그먼트를 만들어야 합니다.

  • 왼쪽 메뉴에서 PlayStream을 선택합니다.
  • 세그먼트 탭을 선택합니다.
  • 그런 다음 새 세그먼트 버튼을 선택합니다.
  • 세그먼트 이름을 만듭니다: 높은 XP 플레이어.
  • 플레이어로 정의합니다. 여기서 Total_XP Gained라는 통계 값2725보다 큽니다.

참고: 현재 예약된 작업 시스템은 세그먼트당 초당 10~15개의 작업을 처리할 수 있습니다. 세그먼트를 디자인할 때는 크기 및 작업 실행 기간에 대한 계획을 미리 계획합니다. 태스크를 실행할 수 있는 기간에 대한 제한은 없지만 특정 시간 범위에서 작업을 실행해야 하는 경우 세그먼트 크기를 적절하게 조정해야 합니다.

게임 관리자 - PlayStream - 세그먼트 - 높은 XP 플레이어

2단계 - 이 세그먼트에 대한 작업 만들기

  • 세그먼트 탭을 선택합니다.
  • 그런 다음 작업 실행 …을 선택합니다.

게임 관리자 - PlayStream - 세그먼트 - 작업 실행

이렇게 하면 서버->작업 탭의 작업 만들기 보기로 이동하고 선택한 세그먼트를 기반으로 다양한 필드를 미리 채웁니다.

게임 관리자 - 서버 - 작업 - 작업 만들기

3단계 - 작업에 동작 추가

다음으로, 설정 작업을 완료할 수 있습니다.

  • 이름을 높은 XP 플레이어 보상으로 변경합니다.
  • 이 설명을 추가합니다: 레벨 2 이상의 플레이어에게 선물 제공.
  • 동작 추가를 선택합니다.
    • 제공된 필드에 가상 통화 지급을 입력합니다.
    • 가상 통화 코드: GM코드(보석(Gems)의 약자).
    • 합계: 20
  • 지금은 일정 예약을 수동으로 설정해 둡니다.
  • 저장 후 실행 버튼을 선택하여 작업을 실행합니다.

게임 관리자 - 서버 - 작업 - 동작 추가 - 저장 후 실행

4단계 - 작업 모니터링

작업 보기에는 실행 중인 작업이 표시됩니다. 초기에는 작업 상태가 진행중이 되지만 세그먼트가 작기 때문에 작업이 성공으로 빠르게 변경됩니다.

게임 관리자 - 서버 - 작업 - 작업 성공

이제 작업 실행 세부 정보를 확인해 봅시다. 이전 실행 작업 목록에서 완료된 작업을 선택합니다. 다음과 같은 중요한 정보가 표시됩니다.

  • 처리된 플레이어 수.
  • 작업이 시작된 시기.
  • 완료하는 데 소요된 시간.
  • 실행되었을 때 있었던 매개 변수.
  • 실행한 사람.
  • 수동으로 예약되었는지 여부 등.

작업이 아직 진행 중인 경우 작업 인스턴스 세부 정보 보기에서 진행 상태를 확인하고 남은 예상 시간을 확인할 수 있습니다.

게임 관리자 - 서버 - 작업 - 작업 인스턴스 세부 정보

작업이 성공적으로 실행되었는지 확인하려면 다음을 수행하세요.

  • 플레이어 탭으로 이동합니다.
  • 플레이어를 선택합니다.
  • 그런 다음 이벤트 기록 탭을 선택합니다.
  • 목록에서 최신 이벤트는 player_virtual_currency_balance_changed여야 하며, 플레이어의 보석이 20만큼 증가해야 합니다.

참고 항목

이 이벤트를 확장하여 세부 정보를 볼 수 있습니다.

게임 관리자 - 이벤트 기록 - 이벤트 세부 정보

다음 작업

이 자습서에서는 세그먼트의 모든 플레이어에 대해 동작을 실행하는 단계를 소개했지만 작업과 관련하여 더 많은 것을 수행할 수 있습니다.

다음은 시도할 수 있는 다른 작업에 대한 몇 가지 아이디어입니다...

작업 예약

수동으로 작업을 실행할 필요가 없습니다. 작업이 반복적으로자동 실행되도록 예약할 수 있습니다. 예를 들어, 지난 24시간 동안 게임을 한 모든 플레이어의 세그먼트를 만든 다음 매일 해당 플레이어에게 XP를 제공하는 예약된 작업을 실행할 수 있습니다.

게임 관리자 - PlayStream - 세그먼트 - 24시간 동안의 XP 플레이어

게임 관리자 - 서버 - 작업 - 예약된 작업

각 플레이어에 대한 CloudScript 실행

대량 동작의 가장 강력한 사용 방법은 각 플레이어에 대해 임의의 CloudScript 함수를 실행하는 것입니다. 이 CloudScript는 PlayFab 서버 API에서 아이템, 통화 지급, 플레이어 데이터 검사 및 변경 등 수행할 수 있는 모든 작업을 수행할 수 있습니다.

예를 들어, 매주 다시 설정되는 이벤트 순위표가 있으며, 다시 설정되기 전에 모든 플레이어를 검토하고 마지막 이벤트의 값을 기준으로 보상을 주고 싶다고 가정해 보세요. 아래의 예제는 Unicorn Battle을 사용합니다.

  1. 매주 다시 설정되고 집계 메서드 Last를 사용하는 새 상태 Event_QuestsCompleted를 만듭니다.

    게임 관리자 - 순위표 - 순위표 편집

  2. Total_QuestsCompleted가 변경될 때마다 이 Event_QuestsCompleted 상태를 증가시키는 새로운 PlayStream 동작을 만듭니다.

    PlayStream - 이벤트 동작 - 이벤트 동작 편집

  3. 대량 동작 작업에서 호출할 수 있는 CloudScript 함수를 작성합니다.이 함수는 플레이어를 검토하고 마지막 값을 기반으로 보상을 제공합니다.

// this function will be called as a bulk action by a scheduled task for players in a segment
handlers.GiveTieredReward = function (args, context) {
    var profile = context.playerProfile;

    var statVersion = 0;        // set to whatever version you need to use

    var getStatRequest = {};
    getStatRequest.PlayFabId = profile.PlayerId;
    getStatRequest.StatisticNameVersions = [{ "StatisticName": "Event_QuestsCompleted", "Version": statVersion }];

    try {
        getStatRequest.PlayerResult = server.GetPlayerStatistics(getStatRequest);
    } catch (e) {
    };

    if (getStatRequest.PlayerResult && getStatRequest.PlayerResult.Statistics.length > 0) {
        getStatRequest.lastScore = getStatRequest.PlayerResult.Statistics[0].Value
    }

    if (getStatRequest.lastScore && getStatRequest.lastScore > 2) {
        // give gift to all players with more than 2 quests completed in last event
        // in a real event we would want to use a lookup table of gifts
        // but here we are just hard-coding it
        var giftRequest = {};
        giftRequest.PlayFabId = profile.PlayerId;
        giftRequest.ItemIds = ["CrystalKey"];
        giftRequest.grantResult = server.GrantItemsToUser(giftRequest);
        return giftRequest;
    } else {
        return getStatRequest;
    }
}
  1. 새 CloudScript 버전을 Live로 설정하고 모든 플레이어에 대해 GiveTieredReward 함수를 호출하는 새 작업을 만듭니다. 작업을 저장하고 실행하는 것을 잊지 마세요.

    서버- 작업 - 새 예약된 작업

  2. 이 작업의 이벤트가 PlayStream 이벤트 디버거에 표시됩니다.

    PlayStream - 대시보드 - 이벤트 디버거

  3. 타임 스탬프를 선택하여 CloudScript 이벤트가 실행된 모든 플레이어 트리거 동작을 선택하고 각 플레이어에 대한 CloudScript 실행의 상세한 결과를 볼 수 있습니다. 여기에는 CloudScript 실행 시 플레이어 프로필의 스냅샷과 같은 유용한 진단 정보가 포함됩니다.

    PlayStream - 대시보드 - 원시 이벤트 JSON