Economy v2는 이제 정식 출시(GA)되었습니다. 지원 및 피드백은 PlayFab 포럼을 참조하세요.
- Title Data에서 가중 아이템 풀로 루트 테이블을 정의합니다.
- Azure Function을 사용해 루트 테이블에서 무작위 아이템을 롤합니다.
- 단일 호출로 컨테이너 토큰을 원자적으로 차감하고 무작위로 선택된 아이템을 부여합니다.
작동 방식
- Title Data에 루트 테이블 정의: 드롭 테이블 구성(아이템 ID, 가중치, 수량)을 Title Data에 JSON으로 저장하면 코드를 다시 배포하지 않고도 업데이트할 수 있습니다.
- 컨테이너를 가상 화폐로 표현: 열지 않은 루트 상자 역할을 하는 가상 화폐인 고정 콘텐츠 컨테이너와 동일한 컨테이너 토큰 패턴을 사용합니다.
- Azure Function을 호출해 컨테이너 열기: 함수는 루트 테이블을 읽고 가중 무작위 선택을 실행한 다음
ExecuteInventoryOperations를 호출하여 컨테이너 토큰 1개를 원자적으로 차감하고 무작위로 선택된 아이템을 추가합니다.
필수 구성 요소
- PlayFab 개발자 계정.
- Game Manager에서 만든 타이틀.
- 루트 보상으로 부여할 수 있는 게시된 카탈로그 아이템.
- 컨테이너를 나타내는 가상 화폐(설정 지침은 고정 콘텐츠 컨테이너 참조).
- PlayFab 타이틀에 연결된 Azure Functions 프로젝트.
1단계: Title Data에 루트 테이블 정의
디자이너가 코드 변경 없이 드롭 확률을 업데이트할 수 있도록 Title Data에 루트 테이블 정의를 저장합니다.예제 루트 테이블 구조
JSON 값을 갖는LootTables라는 Title Data 키를 만듭니다.
Title Data 설정
Game Manager
- Content > Title Data로 이동합니다.
LootTables라는 키를 만듭니다.- JSON 루트 테이블 구성을 값으로 붙여넣습니다.
- Save를 선택합니다.
API
SetTitleData를 사용합니다.2단계: Azure Function 만들기
플레이어가 컨테이너를 열 때 게임 클라이언트가 호출하는 Azure Function을 만듭니다. 함수는 다음을 수행합니다.- 플레이어가 컨테이너 토큰을 하나 이상 갖고 있는지 확인합니다.
- Title Data에서 루트 테이블을 읽습니다.
- 가중 무작위 선택을 실행합니다.
ExecuteInventoryOperations를 호출하여 토큰을 원자적으로 차감하고 보상을 부여합니다.
데이터 모델
가중 무작위 선택
전체 Azure Function
GetContainerCurrencyId 도우미 함수는 루트 테이블 이름을 해당 컨테이너 화폐 ID에 매핑합니다. 이 매핑은 루트 테이블과 함께 Title Data에 저장하거나 명명 규칙을 사용할 수 있습니다.3단계: 플레이어에게 컨테이너 토큰 부여
게임플레이, 스토어 구매 또는 보상을 통해 플레이어에게 컨테이너 토큰을 부여합니다. 고정 콘텐츠 컨테이너에서 설명한 것과 동일한 접근 방식을 사용합니다.4단계: 게임 클라이언트에서 함수 호출
플레이어가 컨테이너를 열 때 ExecuteFunction을 사용해 Azure Function을 호출합니다.루트 테이블 설계 패턴
희귀도 등급
기하급수적으로 감소하는 가중치를 가진 고전적인 희귀도 시스템:- Common: ~90.0%
- Uncommon: ~9.0%
- Rare: ~0.9%
- Legendary: ~0.09%
혼합 보상을 사용한 다중 롤
혼합 풀에서 3개의 무작위 아이템을 제공하는 보급품 상자:보장 + 무작위 (피티 시스템)
“10번 열 때마다 레어 이상 보장” 패턴의 경우, Display Properties 또는 Player Data에서 플레이어의 열기 횟수를 추적하고, 임계값에 도달했을 때 Azure Function에서 무작위 선택을 재정의합니다.중첩된 드롭 테이블
루트 테이블은 ID로 다른 루트 테이블을 참조할 수 있습니다. Azure Function은 참조를 재귀적으로 확인합니다.ItemId가 TABLE:로 시작하는지 확인하고, 그렇다면 아이템을 직접 부여하는 대신 참조된 테이블에서 롤합니다.
보안 고려 사항
- 항상 루트 로직을 서버 측 Azure Function에서 실행합니다. 어떤 아이템이 롤되었는지 결정하는 데 클라이언트를 절대 신뢰하지 마세요. 이 접근 방식은 조작을 방지합니다.
- 함수가 재시도되는 경우 중복 부여를 방지하려면
ExecuteInventoryOperations호출에IdempotencyId를 사용하세요. 자세한 내용은 멱등성 트랜잭션 및 재시도를 참조하세요. - 차감 전에 플레이어의 인벤토리를 확인하여 컨테이너 소유권을 확인합니다.
ExecuteInventoryOperations의Subtract작업은 플레이어에게 토큰이 충분하지 않으면 실패하며, 전체 배치를 롤백합니다. - 감사를 위해 모든 롤을 로깅합니다. 함수의 반환 값과 PlayStream 이벤트는 각 플레이어가 받은 것에 대한 추적을 제공합니다.
