다음을 통해 공유


스택

Important

이제 Economy v2가 일반 공급됩니다. 지원 및 피드백을 받으려면 PlayFab 포럼으로 이동하세요.

Economy V2 인벤토리 서비스는 재고 요구 사항에 대한 더 큰 유연성과 지원을 추가할 수 있는 스택의 개념을 소개합니다. 스택을 사용하면 동일한 항목의 개별 인스턴스가 동일한 인벤토리 내에 존재할 수 있습니다. 이 기능을 사용하면 게임 내 조직 시나리오, 다양한 아이템 속성 등을 설정할 수 있습니다.

동일한 Id의 항목은 각각 고유한 양으로 항목의 스택으로 저장하고 StackId(으)로 구분할 수 있습니다. 지정하지 않으면 인벤토리 작업은 일반적으로 StackId가 있는 기본 스택을 사용합니다. default 스택은 삭제할 수 없습니다. 다음에 StackId 없이 추가/전송이 수행되거나 기본 StackId를 사용하면 기본 스택이 다시 만들어집니다.

인벤토리 및 스택 관리

다음은 인벤토리 API 및 스택과의 상호 작용에 대한 자세한 분석입니다.

인벤토리 아이템 추가

AddInventoryItems API에서 Item 매개 변수에서를 StackId을(를) 정의할 수 있습니다. 이 매개 변수는 증가하는 스택 또는 생성되는 새 스택의 ID를 정의합니다.

StackId(을)를 이용한 요청 예제AddInventoryItems:

{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
    "Amount": 5,
}

위의 요청은 크기가 5이고 StackId가 NewStack인 항목의 새 스택을 만들거나 기존에 이미 있는 경우 NewStack에 5를 추가합니다.

인벤토리 아이템 빼기

SubtractInventoryItems API에서 StackId는 빼는 스택을 정의하는 데 사용됩니다. 또한 빼면 스택 크기가 0인 경우 스택을 삭제하는 DeleteEmptyStacks 부울을 설정할 수 있습니다.

스택에서 현재 스택 크기보다 더 많이 빼려고 하면 오류가 발생합니다.

StackId를 사용하는 요청 예제 SubtractInventoryItems:

{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
    "Amount": 5,
    "DeleteEmptyStacks": true,
}

위의 요청은 ID가 NewStack인 스택에서 5를 빼고 정확히 5인 경우 스택을 삭제합니다.

인벤토리 아이템 업데이트

UpdateInventoryItems API에서 Item 매개 변수에서를 StackId을(를) 정의할 수 있습니다. 이 매개 변수는 업데이트중인 스택 또는 생성되는 새 스택의 ID를 정의합니다.

예제 UpdateInventoryItems 요청:

{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack",
        "Amount": 5
    }
}

위의 요청은 크기가 5이고 StackId가 NewStack인 항목의 새 스택을 만들거나 기존에 이미 있는 경우 NewStack의 양을 5로 설정합니다.

인벤토리 아이템 삭제

DeleteInventoryItems API는 플레이어의 인벤토리에서 아이템의 전체 스택을 삭제하는 데 사용됩니다. StackId(을)를 제공하여 삭제할 항목의 특정 스택을 정의할 수 있습니다.

예제 DeleteInventoryItems 요청:

{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
}

인벤토리 아이템 구매

PurchaseInventoryItems API는 아이템의 카탈로그에 정의된 가격을 사용하고 플레이어의 인벤토리에서 비용을 공제하고 원하는 양의 아이템과 교환합니다. 구매할 Item과 구매하려는 아이템의 Amount를 지정해야 합니다.

스택을 사용하여 구매하는 경우 다음과 같은 몇 가지 매개 변수가 있습니다.

  • PriceAmounts의 경우 각 가격 항목(즉, 소비되는 항목)에 대한 선택적 StackId을(를) 정의하여 지출된 항목이 공제되는 스택을 정의할 수 있습니다.
  • Item 개체의 경우 수신 항목이 배치될 스택을 나타내는 선택적 StackId을(를) 정의할 수 있습니다.
  • 빼면 스택 크기가 0인 경우 스택을 삭제하는 DeleteEmptyStacks 부울을 설정할 수 있습니다.

TODO 링크 추가

스택이 있는 PurchaseInventoryItems 요청 예제:

{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "LaserSword",
        "StackId": "MyLaserSwordStack"
    },
    "Amount": 10,
    "PriceAmounts": [
        {
            "ItemId": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
            "Amount": 5,
            "StackId": "MyNewStack",
        }
    ],
    "DeleteEmptyStacks": true,
}

인벤토리 아이템 전송

스택과 함께 TransferInventoryItems API를 사용하는 경우 다음과 같은 몇 가지 관련 매개 변수가 있습니다.

  • GivingItem 개체의 경우 지정된 항목을 가져올 스택을 나타내는 선택적 StackId을(를) 정의할 수 있습니다.
  • ReceivingItem 개체에서 수신 항목이 배치될 스택을 나타내는 선택적 StackId을(를) 정의할 수 있습니다.
  • GivingItem 크기로 인해 스택 크기가 0인 경우 스택을 삭제하는 DeleteEmptyStacks 부울을 설정할 수 있습니다.

스택이 있는 TransferInventoryItems 요청 예제:

{
    "GivingEntity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "ReceivingEntity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "GivingItem": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "default",
    },
    "ReceivingItem": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "MyNewStack",
    },
    "Amount": 10,
    "DeleteEmptyStacks": true
}

ExecuteInventoryOperations API

ExecuteInventoryOperations API의 Operation 개체에서 StackIdDeleteEmptyStacks 매개 변수를 사용할 수 있습니다. 이러한 매개 변수를 사용하면 스택을 사용하여 여러 인벤토리 작업을 일괄 처리할 수 있습니다.

스택이 있는 ExecuteInventoryOperations 요청 예제:

"Entity": {
    "Type": "title_player_account",
    "Id": "ABCD12345678"
 },
"Operations": [
    {
        "Update": {
            "Item": {
                "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
                "StackId": "default",
                "Amount": 10
            }
        }
    },
    {
        "Subtract": {
            "Item": {
                "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
                "StackId": "MyNewStack"
            },
            "Amount": 5
        }
    }
]

DisplayProperties 및 NewStackValues를 사용하여 사용자 지정 속성 추가

DisplayProperties 매개 변수를 사용하여 사용자 지정 항목 속성을 인벤토리 항목으로 설정할 수 있습니다. 속성 설정은 AddInventoryItems, PurchaseInventoryItemsTransferInventoryItems API에서 수행할 수 있지만 새 스택을 만들 때만 가능합니다. 새 아이템에 대한 디스플레이 속성을 설정하려면 API 요청에서 NewStackValues 매개 변수를 설정해야 합니다.

NewStackValues를 이용한 요청 예제AddInventoryItems:

{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "20a645ce-a3bf-4fcb-8e67-36aa7bf0331d",
        "StackId": "NewStack"
    },
    "Amount": 15,
    "NewStackValues": {
        "DisplayProperties": {
            "DifficultyRating":5,
            "IsMagic": true,
            "Rarity": "Legendary"
        }
    }
}

기존 아이템에 디스플레이 속성을 업데이트하기 위해 UpdateInventoryItems API를 사용하여 속성을 직접 수정할 수 있습니다.