06
07

⚠️이 글은 API 문서를 공부한 내용을 정리한 글입니다.  ↓

https://partner.steamgames.com/doc/features/inventory/schema

 

썸네일

인벤토리가 지원하는 기능이 하도 많아서 어렵네요.


인벤토리 시스템 구조 

아이템 (Items)

아이템은 Steam의 인벤토리 시스템에서 가장 기본적인 유닛/오브젝트입니다.

 

아이템 Type과 사용 방법에 따라 고유 ID, 이름, 설명 및 추가 메타데이터 범위로 정의된 개념입니다.

 

예를 들어 아이템에는 Steam 상점에서 사용할 수 있는 "price(가격)"이 있을 수 있으며,

지정된 다른 아이템 세트를 소비하여 제작할 수 있도록 정의된 "exchange(교환)"도 지정 가능합니다.

 

번들(Bundles)

번들은 아이템과 수량의 집합을 나타내며 인스턴스화되면 해당 아이템의 컬렉션으로 해체됩니다.

예를 들어 하나의 번들은 아이템 A를 3개, 아이템 B를 2개 등등을 포함할 수 있습니다.

 


기본적으로 아이템 정의(ItemDef)를 하는 방법

아이템 정의(ItemDef)는 Steam이 이해하고 해석하는 핵심 속성이며,

경제(Economy), 거래 및 인벤토리 표시의 올바른 작동에 꼭 필요합니다. 

이러한 속성(properties)의 대부분은 ISteamEconomy/GetAssetClassInfo 웹 API에서 반환하는 속성과 동일합니다.

 

ItemDef는 다음 유형 중 하나여야 합니다.

이름 설명
item 플레이어 인벤토리에서 찾을 수 있는 아이템 타입입니다.
bundle 각 타입과 연관된 수량과 함께 ItemDefs의 컬렉션을 나타냅니다.
아이템이 생성되면 자동으로 번들 bundle 속성에 구성된 아이템 집합으로 확장됩니다.
generator 랜덤 아이템을 나타냅니다.
아이템을 승하면 번들 bundle 속성에서 아이템 타입 하나를 무작위로 선택하고,
해당 유형의 인스턴스를 생성합니다.
(예: 상자의 잠금이 해제되면 나오는 아이템 중 하나가 생성된다고 상상해보세요.)
playtimegenerator 애플리케이션의 ISteamInventory::TriggerItemDrop을 호출만 하면
승인할 수 있는 특별한 형태의 생성기입니다.
tag_generator 아이템 인스턴스에 태그를 적용하는 특수 아이템 정의입니다.
(자세한 내용은 Steam 인벤토리 아이태그 참조).
혹은 제가 쓴 https://kimyir.tistory.com/61 에도 있습니다.

bundle이나 generator같은 것들은 아래에서 더 설명하겠습니다.

 

우선은 기본적인 ItemDef부터 설명하겠습니다.

아이템 정의 프로퍼티 (ItemDef Properties)

ItemDef가 가지는 각 프로퍼티의 설명입니다.

 

추후에 Heathen Api에서 ItemDefinitionObject 다룰 때 비슷한게 많습니다.

그렇기 때문에 개인적으로는 전체적으로 한번씩 훑어보면 좋다고 생각합니다.

이름 설명
appid 애플리케이션의 ID
name 아이템의 영어 이름,
아래 예시처럼 아이템 이름의 현지화 버전 이름을 제공할 수 있습니다.

보다시피 접미사로 뭘 붙이는데 자세한 내용은 ↓
https://partner.steamgames.com/doc/store/localization
description 아이템의 영어 설명.
아래 예시처럼 아이템 설명의 현지화 버전을 제공할 수 있습니다.

보다시피 접미사로 뭘 붙이는데 자세한 내용은 ↓
https://partner.steamgames.com/doc/store/localization
display_type 아이템의 ‘타입’에 대한 영어 설명.
아래 예시처럼 아이템 타입의 현지화 버전을 제공할 수 있습니다.

보다시피 접미사로 뭘 붙이는데 자세한 내용은 ↓
https://partner.steamgames.com/doc/store/localization
itemdefid 이 itemdef의 ID입니다. 워크숍이 아닌 아이의 경우 1,000,000보다 낮아야 합니다.
type 내부 값.  타입으로는 요렇게 있습니다. ↓
('item' | 'bundle' | 'generator' | 'playtimegenerator' | 'tag_generator')
bundle 아래 복잡한 아이템 정의 부분에서 마저 설명
promo 아래 프로모션 아이템 부분에서 마저 설명
drop_start_time UTC 타임스탬프, (YYYYMMDDhhmmss,mmmm m m n과 같은 긴 형식)
이 시간이 되기 전에는 프로모션 배급을 방지하며,
프로모션을 수동으로 셋팅할 때만 적용됩니다.
예를 들어 promo = manual 느낌
아래 프로모션 형식 부분에서 마저 설명
exchange 아래 교환 형식 부분에서 마저 설명
price 아래 가격 형식 부분에서 마저 설명
price_category 다양한 통화 값을 처리하는 미리 설정된 가격입니다. (환율 이런거 고려)
아래 가격 형식 부분에서 마저 설명
background_color 인벤토리 배경 색을 6자리 16진수로 표시합니다.
name_color 인벤토리 이름 색을 6자리 16진수로 표시합니다.
icon_url 아이템의 작은 아이콘에 대한 URL입니다.
URL은 Steam 서버가 직접 다운로드&캐시하므로 Public으로 접근 가능 해야 합니다.
권장 크기는 200x200입니다.
icon_url_large 아이템의 큰 아이콘에 대한 URL입니다.
URL은 Steam 서버가 직접 다운로드&캐시하므로 Public으로 접근 가능 해야 합니다.
권장 크기는 2048x2048입니다.
marketable false / true으로 이뤄지고,
Steam 커뮤니티 장터에서 이 아이템을 다른 사용자에게 판매할 수 있는지 여부입니다
tradable false / true으로 이뤄지고,
Steam 거래를 사용하여 이 아이템을 다른 사용자와 거래할 수 있는지 여부입니다.
tags 아이템 태그 문서 참고
혹은 https://kimyir.tistory.com/61 여기서 찾아보기
tag_generators 적용할 tag_generator 아이템 정의의 ID 목록
혹은 https://kimyir.tistory.com/61 여기서 찾아보기
tag_generator_name 태그 카테고리 토큰의 이름
혹은 https://kimyir.tistory.com/61 여기서 찾아보기
tag_generator_values 태그값 or 선택될 확률의 목록
혹은 https://kimyir.tistory.com/61 여기서 찾아보기
store_tags ';'으로 구분된 '태그'가 있는 문자열. 
이 태그는 앱의 Steam 아이템 상점에 있는 아이템을 분류/필터하는 데 사용됩니다.
store_images ';' 문자로 구분되는 이미지 URL.
이미지는 프록시 처리되어 Steam 아이템 상점의 자세한 정보 페이지에 사용됩니다.
game_only false / true으로 이뤄지고,
true면 새로운 아이템 알림을 포함해 사용자의 Steam Backpack에 표시되지 않습니다.
이에 대한 일반적인 용도는 즉시 소비되는 아이템 부여입니다.
hidden false / true으로 이뤄지고,
true인 경우 아이템 정의가 클라이언트에 표시되지 않습니다.
사용하지 않거나 개발 중인 itemdef를 숨기려면 이 옵션을 사용하세요.
store_hidden false / true으로 이뤄지고,
true인 경우 이 아이템은 앱의 Steam 아이템 상점에서 숨겨집니다.
기본적으로 가격이 있는 모든 아이템이 상점에 표시됩니다.
use_drop_limit false / true으로 이뤄지고,
true인 경우 drop_limit를 사용해서
ISteamInventory::TriggerItemDrop을 통해 부여되는 아이템을 제한합니다.
아래 플레이타임 아이템 드랍에서 마저 설명
drop_limit 정수(Integer) 타입이며, 특정 사용자만 제한하는데,
ISteamInventory::TriggerItemDrop으로 아이템을 드랍(지급)하는 횟수를 제한합니다.
0으로 설정하면 앞으로 이 아이템이 떨어지지 않습니다.
아래 플레이타임 아이템 드랍에서 마저 설명
drop_interval 정수(Integer) 타입이며, 아이템이 사용자에게 부여되기 전의 Playtime(분 단위)입니다. 
아래 플레이타임 아이템 드랍에서 마저 설명
use_drop_window false / true으로 이뤄지고,
true면 이 itemdef에 "drop_window"를 사용합니다.
아래 플레이타임 아이템 드랍에서 마저 설명
drop_window 정수(Integer) 타입이며, 
아이템을 부여하기 전에 대기 기간(window)의 경과 시간(분)입니다. 
아래 플레이타임 아이템 드랍에서 마저 설명
drop_max_per_window 정수(Integer) 타입이며,
쿨다운이 적용되기 전에 허용되는 기간(window) 내 허가된 Numbers.
기본값은 1입니다.
granted_manually false / true으로 이뤄지고,
true인 경우 명시적 아이템 정의 ID로 
AddPromoItem() 또는 AddPromoItems()가 호출될 때만 부여됩니다. 
그렇지 않으면 GrantPromoItems() 호출을 통해 부여될 수 있습니다. 
기본값은 false입니다.
use_bundle_price false / true으로 이뤄지고,
기본값은 false입니다.
아래 번들 판매에서 마저 설명
auto_stack false / true으로 이뤄지고,
true면 아이템 부여가 자동으로 주어진 타입의 단일 스택에 추가됩니다.
수량이 변경되면 인벤토리 콜백에서 부여한 것들을 볼 수 있습니다.
기본값은 false입니다.

이런 속성들 외에도 게임에 필요한 추가 속성을 정의할 수도 있습니다.

 


아이템 정의(ItemDef)의 예시

위의 속성들을 이용해서 JSON 형식으로 써본 예시입니다.

{
	"appid": 480,
	"items": [
	{
		"itemdefid": 10,
		"type": "playtimegenerator",
		"bundle": "100x100;101x50;102x25;103x2;110x20;111x20;120x5;121x3",
		"name": "Drop Generator",
		"name_color":  "7D6D00",
		"background_color":  "3C352E",
		"item_slot": "generator",
		"icon_url": "http://cdn.beta.steampowered.com/apps/440/icons/c_fireaxe_pyro_xmas_large.fa878752e1aa09a721a03042a234063b6c929278.png",
		"icon_url_large": "http://cdn.beta.steampowered.com/apps/440/icons/c_fireaxe_pyro_xmas_large.fa878752e1aa09a721a03042a234063b6c929278.png",
		"tradable": false,
		"marketable": false
	},
	{
		"itemdefid": 100,
		"type":  "item",
		"name": "Hat decoration",
		"description": "Hat decoration description",
		"price": "1;USD99",
		"name_color":  "7D6D00",
		"background_color":  "3C352E",
		"item_slot": "decoration",
		"icon_url": "http://cdn.beta.steampowered.com/apps/440/icons/c_fireaxe_pyro_xmas_large.fa878752e1aa09a721a03042a234063b6c929278.png",
		"icon_url_large": "http://cdn.beta.steampowered.com/apps/440/icons/c_fireaxe_pyro_xmas_large.fa878752e1aa09a721a03042a234063b6c929278.png",
		"tradable": true,
		"marketable": true
	},
	{
		"itemdefid": 200,
		"type":  "item",
		"price": "1;VLV100",
		"name_english": "Red Hat",
		"name_german":  "Roter Hut",
		"description_english": "Red Hat",
		"description_german": "Roter Hut",
		"store_tags": "hat;featured",
		"icon_url": "http://cdn.beta.steampowered.com/apps/440/icons/c_fireaxe_pyro_xmas_large.fa878752e1aa09a721a03042a234063b6c929278.png",
		"icon_url_large": "http://cdn.beta.steampowered.com/apps/440/icons/c_fireaxe_pyro_xmas_large.fa878752e1aa09a721a03042a234063b6c929278.png",
		"tradable": true,
		"marketable": true
	}
	]
}

 


복잡한 아이템 정의를 사용하는 방법

번들(bundle), 생성기(generator), 플레이타임 생성기(playtimegenerator)와 같은 아이템 type들의

규칙은 번들 필드(bundle field)로 정의됩니다.

 

번들(bundle) 정의할 땐,

포함될 아이템의 종류(type)와 수량을 기재해야합니다.

 

생성기(generator) 또는 플레이타임 생성기(playtimegenerator)은

생성될 수 있는 아이템의 유형과 각 유형의 상대적 가중치를 기재해야합니다.

가중치는 합쳐서 100이 되어야 하는 것은 아니지만, 편의상 100이 되도록 설정하는 것이 좋습니다.

 

작성 규칙

  • 번들 필드는 ";"로 구분된 일련의 아이템 레시피로 표현됩니다.
  • 각 레시피는 Itemdef의 ID로 구성되며, 선택적으로 "x" 구분자와 원하는 수량을 붙여줍니다.
  • 수량이 명시적으로 제공되지 않으면, 기본값으로 "1"을 사용합니다.

번들 작성시 형식 (format)

bundle_def : item_recipe , { ";" , item_recipe }
item_recipe : item_def , []

번들 예시들

itemdef 201, itemdef 202, itemdef 203을 각각 하나씩 제공할 때:

type: bundle
bundle: 201;202;203

itemdef 101 하나와 itemdef 102 다섯 개를 제공할 때:

type: bundle
bundle: 101x1;102x5

itemdef 501이 90% 확률로, itemdef 502가 9% 확률로, itemdef 503이 1% 확률로 랜덤하게 제공:

이 때 type이 generator다.

type: generator
bundle: 501x90;502x9;503x1

일반 아이템이 90% 확률로, 특별 아이템이 10% 확률로 제공됩니다.

이 때 type이 generator다.

itemdefid: 600
name: Common generator
type: generator
bundle: 601;602;603;604;605

itemdefid: 700
name: Special generator
type: generator
bundle: 701;702;703;704;705

itemdefid: 800
name: Master generator
type: generator
bundle: 600x9;700x1

보다시피 itemdefId로 나눠 600이 9개 700이 한개로 되어있습니다.

 

또한 번들 및 생성기 정의를 연속해서 한번에 사용할 수 있습니다.

주어진 시간 내에 복합 아이템 유형이 단순한 itemDefs만 남을 때까지 반복적으로 확장됩니다.

 


교환 수식 Exchange Formulas

ExchangeItems API를 사용하면 클라이언트에서 안전하게 호출할 수 있는 

아이템 제작/변환 레시피를 정의할 수 있습니다. 

 

Steam 서버는 플레이어 보관함을 확인하고 주어진 materials를 원자적으로 소모하며, 

요구 조건에 만족한다면 대상 아이템을 부여(지급)합니다.

 

원자적 이란? ↓

더보기

‘분리할 수 없음’을 뜻한다.


동시에 같은 파일 위치에 여러 스레드에서 접근할 수 있는데, 그걸 막아준다는 의미.

 

대상 아이템의 타입은 번들(bundle) or 생성자(generator) 정의 타입이 될 수 있습니다.

 

수식(formula)은 대상 아이템의 교환(exchange) 필드에 제공됩니다. 

수식(formula)은 세미콜론 ":" 으로 구분된 하나 이상의 레시피 세트로 지정됩니다.

 

각 레시피는 쉼표 "," 로 구분된 필수 자료(material) 아이템 세트입니다.

필수 자료(material)는 itemdefid 또는 태그로 명시적으로 제공될 수 있습니다. 

수량을 지정하지 않으면 1로 간주됩니다.

 

ExchangeItems을 사용할 때 호출자는 대상 아이템과 교환할 자료 목록을 제공합니다. 

서버는 각 레시피를 확인한 후 주어진 자료 목록으로 만족되는 첫 레시피를 선택합니다.

 

교환(Exchange)은 유연합니다.

열쇠로 상자를 열고, 부품으로 멋진 아이템을 만들고, 아이템을 재활용하고 업그레이드하는 등

모든 작업을 이 수식을 이용해 수행할 수 있습니다.

 

교환 형식 (Exchange Format)

<exchange>: <recipe> { ";" <recipe> }
<recipe>: <material> { "," <material> }
<material>: <item_def_descriptor> / <item_tag_descriptor>
<item_def_descriptor>: <itemdefid> []
<item_tag_descriptor>: <tag_name> ":" <tag_value> []

명확하게 지정되지 않은 경우 필요한 수량은 1개입니다.

 

교환 예시 (Exchange Example)

// require one of:
// - one item#100 and one item#101; or,
// - five of item#102; or,
// - 3 of item#103 and three of item#104.
"exchange":"100,101;102x5;103x3,104x3"

// requires one left glove and one right glove:
"exchange":"handed:left,handed:right"

// require three trees plus something fancy:
"exchange":"type:tree*3,quality:fancy"

// require either:
// - item#201 and item#202; or,
// - a banana-flavored item and a heavy object
"exchange":"201x1,202x1;flavor:banana,mass:heavy"


// recycle five "common" artifacts into one "special" artifact:
{
  "name":"special_generator",
  "type":"generator",
  "tags":"rarity:special",
  "bundle":....,
  "exchange":"rarity:common*5",
  ...
}

 


프로모션 아이템

프로모션 아이템은 아래 4개의 기준에 따라 플레이어에게 지급될 수 있습니다.

1. DLC appid를 포함한 appid의 소유권

2. 도전과제

3. appid 안에 있는 플레이 시간

4. 수동으로 지급 - 클라이언트가 지정된 itemDef ID를 보유한 AddPromoItem을 호출해야 합니다.

 

프로모션 아이템은 Steam에서 확인하므로 클라이언트 안전하게 요청할 수 있습니다.

ISteamInventory::AddPromoItem 문서를 참조하시기 바랍니다.

프로모션 아이템을 정의하려면 itemDef의 "promo" 속성에서,

아이템 지급에 관한 하나 이상의 규칙을 설정하세요.

 

프로모션 아이템은 번들도 가능합니다.

 

수동으로 지급하는 프로모션 아이템에는 드롭 간격을 추가할 수 있습니다. 

이 방법을 통해 매주 몇 가지 할 일(예: 일퀘)을 완료한 플레이어에게 아이템을 지급할 수 있습니다. 

이 기능을 사용하려면 itemdef에서 drop_start_time과 drop_interval 값을 설정하시면 됩니다.


프로모션 아이템은 임시적으로 소유한 플레이어에겐 지급되지 않습니다.

(주말 무료 플레이 기간, 가족 공유 기능으로 플레이하는 등)

프로모션 규정 형식

<promo>: <rule> { ";" <rule> }
<rule>: app_rule / ach_rule / played_rule / manual_rule
<app_rule>: "owns:" <appid>
<ach_rule>: "ach:" <achievement name>
<played_rule>: "played:" <appid>/<minutes played, defaults to 1>
<manual>: "manual"

프로모션 예시

// simple promo rule definitions:
"promo":"owns:440;owns:480"
// has played at least 15 minutes on appid 570:
"promo":"played:570/15"

// consumable item that can be granted once each week:
	"itemdefid": 404,
	"type": "item",
	"name": "Weekly Quest Item",
	"promo": "manual",
	"drop_start_time": "20170801T120000Z",
	"drop_interval": 10080,
...

 

드롭 시작 시간 (Drop Start Time)

프로모션 아이템의 드롭 시작 시간을 설정하면 아이템이 해당 시간 전에 지급되는 것을 막을 수 있습니다.

또한 코드를 배치해 시작 시간 전에 아이템을 지급 하는 것도 가능 합니다.

타임스탬프는 UTC 시간대의 ISO8601 형식인 YYYYMMDDTHHMMSSZ로 명시해야 합니다.

예: 20050515T171151Z.

 


플레이 타임 아이템 드롭(Playtime Item Drops)

플레이 시간 아이템 드롭 기능은 Steam 서버가 사용자의 플레이 시간에 따라서 내가 원할 때,

아이템 드롭(지급)을 관리하고 추적할 수 있게 해줍니다.

 

게임에서 지급할 시기에 ISteamInventory::TriggerItemDrop을 호출하면 됩니다.

다만 드롭(지급)을 실행하려면 아이템의 ‘playtypegenerator’유형을 생성해야 합니다.


플레이 시간 지급은 귀하의 애플리케이션으로 제어됩니다. 

사용자의 플레이 시간에만 기반하여 자동 지급하는 지원 기능은 없습니다. 

 

즉 플레이 시간은 지급을 위한 조건이라는 뜻이며 애플리케이션이 지급 평가를 트리거합니다.

 

아이템 드롭 빈도는 애플리케이션 레벨로 제어 가능합니다.

애플레이케이션 레벨 ↓

커뮤니티 -> 보관함 서비스 -> 플레이 시간 아이템 드롭 섹션 순으로 나뉩니다.

 

아래에 사용자 정의가 가능한 세 가지 제어 항목이 있습니다.

(1) 아이템 드롭까지 얼마나 걸리는가
(2) 한 창(window)에 얼마나 많은 아이템이 드롭되는가? 또한
(3) 또 다른 아이템을 드롭하기까지의 쿨다운 창(window) 시간은 얼마인가?

 

Itemdef마다 동일한 제어 항목이 존재합니다. 

아이템에 설정된 값은 해당 아이템에 대한 애플리케이션의 모든 설정을 재정의할 것입니다. 

이로써 각 아이템은 고유의 drop rate, max-per-window, cool-down window을 갖게 됩니다.

 

각 Play Time generator의 지급은 지급 설정이 지정되면 별도로 트래킹됩니다.

('drop_interval', 'use_drop_window', 'drop_window', 'drop_max_per_window').

 

다시 말해 itemDef에 드롭(지급) 설정이 없다면,

드롭 설정이 없는 다른 모든 Play Time generator들과 드롭을 공유하고,

애플리케이션 드롭 간격의 제약을 받게 됩니다.

 

itemdef가 드롭(지급) 설정을 확실하게 명시할 경우,

해당 아이템의 드롭(지급)은 generator 레벨에서 별도로 지급/트래킹되며,

애플리케이션이나 다른 itemDef 플레이 시간 generator에 구애받지 않습니다.

 

플레이 시간 ItemDef 지급 예시

플레이 시간이 누적 30분 후 사용자에게 아이템이 지급되도록 설정한 예시입니다.

"drop_interval" : 30

 

이렇게만 하게 되면 30분마다 사용자가 플레이 시간 보상 지급을 받을 자격이 되므로
해당 아이템의 반복 파밍을 허용한다는 단점이 있습니다.

아래와 같이 드롭 창 설정을 추가할 것을 적극 권장합니다.

"drop_interval" : 30,
"use_drop_window" : "true",
"drop_window" : "1440"

플레이 시간 30분 후 하루에 한 개의 드롭으로 한정. 

이렇게 하면 사용자가 게임을 플레이하러 올 때 매일 30분 후 드롭을 지급합니다.

window의 단위가 분 단위이기 때문에 1440은 24시간(하루)이 됩니다.

 

만약 매일 세 개의 아이템까지 획득하도록 허용하면 어떻게 될까요? 

그럼 30분 x 3 = 누적 90분이 됩니다. 이 때 연속 플레이하지 않아도 됩니다. 

이렇게 하면 더 오랜 플레이 시간에 보상을 줄 수 있습니다.

"drop_interval" : 30,
"use_drop_window" : "true",
"drop_window" : "1440",
"drop_max_per_window" : "3"

위에서 말했듯이 따로 드롭(지급)설정을 안해놓는다면,

드롭 설정이 없는 다른 모든 Play Time generator들과 드롭을 공유하게 됩니다.

 

드롭 제한

drop_limit 변수는 특정 generator에 대한 최대 플레이 시간 지급을 허용합니다.
이걸로 아이템이 생성되는 시간을 제한할 수 있습니다.

(예: 전설 난이도에서 처음으로 게임을 끝냈을 때, 단 한번 만 지급!)

 

값을 0으로 설정할 경우, 없어진 아이템이 미래에 드롭(지급)되는 걸 방지하는 데도 사용 가능합니다.

use_drop_limit이 "true"로 지정된 경우에만 이 설정을 인정합니다.

 


아이템 판매

특정 게임 아이템을 판매 가능하게 하려면 itemdefs에 가격이나 가격 카테고리를 정의하면 됩니다.
상점 페이지의 사용자 정의 & 활성화에 대한 내용은 Steam 아이템 상점 문서 참조.

 

가격 명시 ( Specifying Prices )

다음 필드 중 하나만 사용하여 아이템 가격을 정의할 수 있습니다. (둘 다 같이 기입은 X)

 

price , 각 통화의 구체적인 가격을 정의합니다. 

정의되지 않은 모든 통화는 구매가 이루어질 때 자동으로 변환됩니다.

 

price_category , 하나의 가격을 정하면 Valve가 관리하는 가격 책정표를 통해 지원되는 모든 통화로 표시됩니다.

 

price_category 필드는 특수 "VLV" 통화로 명시됩니다. (환율 적용) 

VLV100은 $0.99 USD와 같으며, Valve의 환산율을 사용하여 지원되는 모든 통화로 변환됩니다.

 

VLV 환산율은 통화 변동률에 맞춰지도록 신중하게 관리하고 있습니다. 

Steam은 필요할 때마다 가격을 업데이트하며 변동률을 최소화하여 고객에게 

안정된 물가와 긍정적인 사용자 경험을 제공하고 있습니다.

 

가격 형식 (Price Format)

Price: <version>;<pricelist>

Version: "1"
<pricelist> : <originalprice>(;<price>)*

<originalprice>: <currency><integer>(,<currency><integer)*
<price>: (<daterange>)<currency><integer>(,<currency><integer)*

<currency> 3 letters  like "USD"
<integer> amount in currency-specific units
<daterange>: YYYYMMDDTHHMMSSZ-YYYYMMDDTHHMMSSZ

<daterange> 부분은 정확히 33자여야 합니다.

daterages의 목록은 항상 내림차순입니다 (미래 날짜부터 쭉).

 

가격 예시(Price Examples)

price_category: 1;VLV100
Valve 관리 가격표를 이용해 사전 설정된 가격 카테고리.


price: 1;USD100
($1.00 미국 달러)


price: 1;USD100,EUR080
($1.00 미국 달러 또는 0.80 유로)

 

price: 1;USD100,EUR080;20130607T080000Z-20130606T080000ZUSD50,EUR40
($1.00 미국 달러 또는 0.80 유로, 다만 2013년 6월 6일에 $0.50 / 0.40으로 할인)

 

price: 1;USD100,EUR080;20130609T080000Z-20130606T080000ZUSD50,EUR40
($1.00 미국 달러 또는 0.80 유로, 다만 2013년 6월 6일부터 2013년 6월 9일까지 $0.50 / 0.40으로 할인)

 

위와 같은 예시들로 실제 itemDef에 정의할 땐

"price": "1;USD99",

아니면

"price": "1;VLV100",

이런식으로 사용하면 됩니다.


번들 판매

번들 아이템 또한 아이템 상점에 판매를 등록할 수 있습니다. 

번들 아이템은 계산 과정 중 확장되므로 사용자는 지급된 아이템 목록을 보게 됩니다. 

Steam 환불 정책상 정해진 기간 내에 구매 환불을 허용하지만, 

포함된 모든 아이템이 플레이어의 인벤토리에 변형되지 않은 상태로 존재해야 합니다.

 

번들 가격 정하기

번들 가격을 정할 때 몇 가지 고려할 부분들이 있습니다.

번들 가격을 결정하고 번들 수익을 균등하게 할당하기 위해 각 번들마다 포함되어있는

각 아이템의 가격을 하나하나 다 사용하여 번들 가격을 결정합니다.

 

이 할당으로 창작마당 기여자에게 지불될 금액이 정해지게 됩니다.

(듣기로는 창작마당 기여자에게 보상을 줘야하는 문화 때문이라고함 열정페이)

 

한 번들에 서로 다른 창작마당 기여자의 콘텐츠를 쉽게 섞을 수 있으며,

직접 만든 콘텐츠를 창작마당 콘텐츠에 추가할 수도 있습니다.

 

번들 아이템의 가격 책정 방법:

1. 번들 안에 있는 각 아이템의 가격 정보를 각각 명시합니다.


2. 포함된 아이템 중에 개별 판매가 불가능한 것이 있다면

해당 아이템은 store_hidden을 'true'로 설정합니다.

 

3. 번들의 price 또는 price_category 필드를 간단한 가격으로 설정합니다.(예: VLV0).

price 또는 price_category 두가지로 설정한 가격은 상점에서 사용하진 않지만

판매 가능한 아이템이라는 것을 아이템 상점에 알리는 데 필요합니다.

 

4. purchase_bundle_discount를 번들의 할인율로 설정할 수도 있습니다.

 

필요한 경우 번들 가격을 본인이 원하는 통화로 명시 해도됩니다. 

번들 가격 재정의는 귀하가 정의한 모든 purchase_bundle_discount를 무시합니다. 

그러나 각 아이템의 가격은 번들 수익을 균등하게 할당하기 위해 계속 사용됩니다.

 

자동 번들 가격을 재정의하는 방법 ↓

□ 번들의 price 또는 price_category 필드에 원하는 가격을 지정합니다.
□ 번들 아이템의 use_bundle_price를 true로 설정하세요.

 


Generator 아이템 판매

generator 유형의 아이템은 아이템 상점에 직접 판매하지 마십시오.

만약 랜덤으로 뜨는 아이템(상자)를 판매하려면 상자 아이템을 간단한 item 유형으로 정의해야 합니다. 

그리고 상자를 교환 레시피의 입력으로 수락하는 generator 아이템을 생성합니다.

 

구매 후 플레이어가 상자를 '열 때' ISteamInventory::ExchangeItems를 호출해 generator를 실행합니다. 

상자 구매는 상자를 연 순간부터 환불되지 않습니다.


VLV 프리셋 가격표

 

COMMENT