Documentation index for AI agents

GS2-Experience 트랜잭션 액션

검증/소비/입수 각 트랜잭션 액션의 사양

액션의 조합과 동시 실행

모든 서비스에 공통되는 전제는 트랜잭션 액션의 조합에 정리되어 있습니다. 먼저 그쪽을 읽어 주십시오. 이 절의 나머지는 GS2-Experience 고유의 내용입니다.

GS2-Experience의 트랜잭션 액션은 네임스페이스·사용자·경험치 모델·프로퍼티의 조합으로 결정되는 하나의 스테이터스를 대상으로 합니다. 스테이터스는 경험치·랭크·랭크 상한·다음 랭크업에 필요한 경험치를 함께 보관합니다.

조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
경험치의 가산
AddExperienceByUserId
통합되어 값이 합산된다실패한다네임스페이스·사용자·경험치 모델·프로퍼티
경험치의 감산
SubExperienceByUserId
통합되어 값이 합산된다실패한다네임스페이스·사용자·경험치 모델·프로퍼티
경험치의 설정
SetExperienceByUserId
같은 값이면 통합. 값이 다르면 발행 시에 오류실패한다네임스페이스·사용자·경험치 모델·프로퍼티
랭크 상한의 가산
AddRankCapByUserId
통합되어 값이 합산된다실패한다네임스페이스·사용자·경험치 모델·프로퍼티
랭크 상한의 감산
SubRankCapByUserId
통합되어 값이 합산된다실패한다네임스페이스·사용자·경험치 모델·프로퍼티
랭크 상한의 설정
SetRankCapByUserId
같은 값이면 통합. 값이 다르면 발행 시에 오류실패한다네임스페이스·사용자·경험치 모델·프로퍼티
다른 액션으로의 전개
MultiplyAcquireActionsByUserId
통합되어 안쪽 액션이 하나의 리스트로 묶인다자신은 아무것도 업데이트하지 않는다
검증 액션 전반먼저 지정한 쪽이 남음읽기만 하므로 충돌하지 않는다대상·검증 타입·필요 랭크 / 랭크 상한

업데이트하는 6개의 행은 모두 경계가 같습니다. 같은 스테이터스에 대해 다른 행을 두 개 넣으면 트랜잭션이 실패합니다. 경험치의 가산과 랭크 상한의 가산, 가산과 감산, 가산과 설정은 모두 하나의 경계에 대한 두 개의 행입니다. 값을 합산할 수 있는 것은 같은 행의 액션끼리뿐입니다.

중첩 너머의 업데이트는 가산 후의 값이 랭크의 대역에 들어가는 경우에도 실패합니다.

검증 액션은 트랜잭션 시작 시점의 스테이터스를 봅니다. 같은 트랜잭션에서 도달하는 랭크나 랭크 상한을 검증할 수는 없습니다.

MultiplyAcquireActionsByUserId는 랭크를 읽고, 전달받은 액션에 배율을 곱하여 자신의 트랜잭션으로 발행합니다. 자신은 아무것도 업데이트하지 않지만, 전개 후의 액션이 속한 서비스의 제한이 그대로 해당됩니다.

중첩된 트랜잭션에 주의

나란히 작성하면 1건으로 통합되었을 AddExperienceByUserId끼리라도, 한쪽이 안쪽에서 도착하는 경우에는 트랜잭션이 실패합니다. 보상이나 추첨의 내용까지 포함하여, 하나의 트랜잭션 안에서 같은 스테이터스를 업데이트하는 곳이 한 군데만 되도록 설계해 주십시오.

제한을 회피하고 싶은 경우

경험치와 랭크 상한의 가산·설정은 획득 액션, 감산은 소비 액션입니다. 획득 액션끼리의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 가산과 감산의 공존은 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다.

동시 실행과 재시도

랭크가 바뀌지 않는 범위의 가산·감산끼리는 동시 실행 요청이 몇 개 겹쳐도 충돌하지 않습니다. 대역을 조건으로 하고 있는 것의 이점이 여기에 나타납니다.

충돌(409)이 반환되는 것은 병행하는 업데이트가 쌓여서 실제로 랭크가 바뀌는 데까지 도달한 경우, 동시에 랭크 상한이 바뀐 경우, 관리 콘솔이나 서버 API에서의 변경과 겹친 경우입니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다. 부여를 한 번의 요청으로 모으면 발생 빈도를 낮출 수 있습니다.


Verify Action

검증 액션

Gs2Experience:VerifyRankByUserId

사용자 ID를 지정하여 랭크를 검증

지정된 사용자의 현재 랭크가 지정된 값에 대한 조건을 충족하는지 검증합니다.
6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual.
검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다.

수량 지정 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
verifyType문자열 열거형
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
검증 종류
정의설명
less랭크가 지정값 미만일 것
lessEqual랭크가 지정값 이하일 것
greater랭크가 지정값 초과일 것
greaterEqual랭크가 지정값 이상일 것
equal랭크가 지정값과 일치할 것
notEqual랭크가 지정값과 일치하지 않을 것
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
rankValuelong00 ~ 9223372036854775805현재 랭크
랭크업 임계값 테이블을 사용하여 누적 경험치로부터 산출되는 랭크(레벨)입니다. 0부터 시작하며 경험치 임계값을 초과할 때마다 증가합니다. 현재 랭크 캡 값을 초과할 수 없습니다.
multiplyValueSpecifyingQuantityboolfalse수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:VerifyRankByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "verifyType": "[string]검증 종류",
        "propertyId": "[string]프로퍼티ID",
        "rankValue": "[long]현재 랭크",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:VerifyRankByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  verifyType: "[string]검증 종류"
  propertyId: "[string]프로퍼티ID"
  rankValue: "[long]현재 랭크"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").verify.verify_rank_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    verifyType="[string]검증 종류",
    propertyId="[string]프로퍼티ID",
    rankValue="[long]현재 랭크",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Experience:VerifyRankCapByUserId

사용자 ID를 지정하여 랭크 캡을 검증

지정된 사용자의 현재 랭크 캡(버프 효과 포함)이 지정된 값에 대한 조건을 충족하는지 검증합니다.
6가지 비교 연산자를 지원합니다: less, lessEqual, greater, greaterEqual, equal, notEqual.
검증 조건을 충족하지 않는 경우 오류(BadRequest)를 반환합니다.

수량 지정 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
verifyType문자열 열거형
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
검증 종류
정의설명
less랭크 캡이 지정값 미만일 것
lessEqual랭크 캡이 지정값 이하일 것
greater랭크 캡이 지정값 초과일 것
greaterEqual랭크 캡이 지정값 이상일 것
equal랭크 캡이 지정값과 일치할 것
notEqual랭크 캡이 지정값과 일치하지 않을 것
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
rankCapValuelong
0 ~ 9223372036854775805현재 랭크 캡
이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다.
multiplyValueSpecifyingQuantityboolfalse수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:VerifyRankCapByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "verifyType": "[string]검증 종류",
        "propertyId": "[string]프로퍼티ID",
        "rankCapValue": "[long]현재 랭크 캡",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:VerifyRankCapByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  verifyType: "[string]검증 종류"
  propertyId: "[string]프로퍼티ID"
  rankCapValue: "[long]현재 랭크 캡"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").verify.verify_rank_cap_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    verifyType="[string]검증 종류",
    propertyId="[string]프로퍼티ID",
    rankCapValue="[long]현재 랭크 캡",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Consume Action

소비 액션

Gs2Experience:SubExperienceByUserId

사용자 ID를 지정하여 경험치를 감산

지정된 사용자의 상태에서 경험치를 감산합니다. 경험치는 0 미만으로 내려가지 않습니다.
랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
experienceValuelong00 ~ 9223372036854775805잃는 경험치
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:SubExperienceByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "propertyId": "[string]프로퍼티ID",
        "experienceValue": "[long]잃는 경험치",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:SubExperienceByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  propertyId: "[string]프로퍼티ID"
  experienceValue: "[long]잃는 경험치"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").consume.sub_experience_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    propertyId="[string]프로퍼티ID",
    experienceValue="[long]잃는 경험치",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Experience:SubRankCapByUserId

사용자 ID를 지정하여 랭크 캡을 감산

지정된 사용자의 상태의 랭크 캡을 감산합니다. 랭크 캡은 0 미만으로 내려가지 않습니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
rankCapValuelong
0 ~ 9223372036854775805현재 랭크 캡
이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:SubRankCapByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "propertyId": "[string]프로퍼티ID",
        "rankCapValue": "[long]현재 랭크 캡",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:SubRankCapByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  propertyId: "[string]프로퍼티ID"
  rankCapValue: "[long]현재 랭크 캡"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").consume.sub_rank_cap_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    propertyId="[string]프로퍼티ID",
    rankCapValue="[long]현재 랭크 캡",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Acquire Action

입수 액션

Gs2Experience:AddExperienceByUserId

사용자 ID를 지정하여 경험치를 가산

지정된 사용자의 상태에 경험치를 가산합니다. 랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다.
truncateExperienceWhenRankUp이 true인 경우, 랭크업 시 임계값을 초과한 잉여 경험치는 절사됩니다. false(기본값)인 경우에는 다음 랭크로 이월됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
experienceValuelong00 ~ 9223372036854775805획득 경험치
truncateExperienceWhenRankUpbool?false랭크업 시 남은 경험치를 절사할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:AddExperienceByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "propertyId": "[string]프로퍼티ID",
        "experienceValue": "[long]획득 경험치",
        "truncateExperienceWhenRankUp": "[bool]랭크업 시 남은 경험치를 절사할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:AddExperienceByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  propertyId: "[string]프로퍼티ID"
  experienceValue: "[long]획득 경험치"
  truncateExperienceWhenRankUp: "[bool]랭크업 시 남은 경험치를 절사할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").acquire.add_experience_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    propertyId="[string]프로퍼티ID",
    experienceValue="[long]획득 경험치",
    truncateExperienceWhenRankUp="[bool]랭크업 시 남은 경험치를 절사할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Experience:SetExperienceByUserId

사용자 ID를 지정하여 경험치를 설정

지정된 사용자의 상태의 경험치를 지정한 값으로 직접 설정합니다.
갱신 전 상태를 ‘old’로 하여, 갱신 후 상태와 함께 반환합니다.
랭크는 랭크업 임계값에 기반하여 자동으로 재계산됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
experienceValuelong00 ~ 9223372036854775805누적 획득 경험치
이 스테이터스가 축적한 총 경험치입니다. 현재 랭크는 이 값으로부터 랭크업 임계값 테이블을 사용하여 산출됩니다. 현재 랭크 캡에 대응하는 임계값을 초과하여 경험치를 획득할 수 없습니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:SetExperienceByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "propertyId": "[string]프로퍼티ID",
        "experienceValue": "[long]누적 획득 경험치",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:SetExperienceByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  propertyId: "[string]프로퍼티ID"
  experienceValue: "[long]누적 획득 경험치"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").acquire.set_experience_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    propertyId="[string]프로퍼티ID",
    experienceValue="[long]누적 획득 경험치",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Experience:AddRankCapByUserId

사용자 ID를 지정하여 랭크 캡을 가산

지정된 사용자의 상태의 랭크 캡을 가산합니다. 랭크 캡은 경험치 모델에서 정의된 maxRankCap을 초과할 수 없습니다.
랭크 캡은 지정된 프로퍼티에서 사용자가 도달 가능한 최대 랭크를 결정합니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
rankCapValuelong
0 ~ 9223372036854775805현재 랭크 캡
이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:AddRankCapByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "propertyId": "[string]프로퍼티ID",
        "rankCapValue": "[long]현재 랭크 캡",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:AddRankCapByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  propertyId: "[string]프로퍼티ID"
  rankCapValue: "[long]현재 랭크 캡"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").acquire.add_rank_cap_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    propertyId="[string]프로퍼티ID",
    rankCapValue="[long]현재 랭크 캡",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Experience:SetRankCapByUserId

사용자 ID를 지정하여 랭크 캡을 설정

지정된 사용자의 상태의 랭크 캡 값을 지정한 값으로 직접 설정합니다.
갱신 전 상태를 ‘old’로 하여, 갱신 후 상태와 함께 반환합니다.
랭크 캡은 경험치 모델에서 정의된 maxRankCap으로 상한이 제한됩니다.

수량 지정 가능한 액션: 아니오

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
rankCapValuelong
0 ~ 9223372036854775805현재 랭크 캡
이 스테이터스가 현재 도달할 수 있는 최대 랭크입니다. 초기값은 경험치 모델의 defaultRankCap으로 설정되며, 한계돌파 등의 랭크 캡 증가 조작을 통해 maxRankCap까지 끌어올릴 수 있습니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:SetRankCapByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "propertyId": "[string]프로퍼티ID",
        "rankCapValue": "[long]현재 랭크 캡",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:SetRankCapByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  propertyId: "[string]프로퍼티ID"
  rankCapValue: "[long]현재 랭크 캡"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").acquire.set_rank_cap_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    propertyId="[string]프로퍼티ID",
    rankCapValue="[long]현재 랭크 캡",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Experience:MultiplyAcquireActionsByUserId

사용자 ID를 지정하여 경험치 대상 프로퍼티의 랭크에 따라 리소스를 가산

프로퍼티의 현재 랭크 값을 기반으로 지정된 rateName의 입수 액션 배율을 참조하고, 지정된 입수 액션을 해당 배율(baseRate와 조합)로 곱하여 그 결과 액션을 실행하는 트랜잭션을 시작합니다.
랭크에 기반한 보상 스케일링에 사용되며, 랭크가 높을수록 비례하여 더 많은 리소스를 획득할 수 있습니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
experienceNamestring
~ 128자경험치 모델 이름
이 스테이터스의 랭킹 규칙을 정의하는 경험치 모델의 이름입니다. 어떤 랭크업 임계값 테이블과 랭크 캡 설정이 적용되는지를 결정합니다.
propertyIdstring
~ 1024자프로퍼티ID
사용자 스코프 내에서 이 스테이터스를 고유하게 식별하는 개발자 정의 식별자입니다. 경험치를 보유한 GS2-Inventory의 아이템 세트 GRN이나 GS2-Dictionary의 엔트리 GRN 끝에 경험치 모델의 접미사를 붙인 값을 사용할 것을 권장합니다.
rateNamestring
~ 128자보상 가산 테이블 이름
이 보상 가산 테이블의 고유 식별자입니다. 특정 입수 액션에 적용할 배율 테이블을 지정할 때 참조됩니다.
acquireActionsList<AcquireAction>[]0 ~ 100 items입수 액션 목록
baseRatefloat10 ~ 1000000기초 배율
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Experience:MultiplyAcquireActionsByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "experienceName": "[string]경험치 모델 이름",
        "propertyId": "[string]프로퍼티ID",
        "rateName": "[string]보상 가산 테이블 이름",
        "acquireActions": [
            {
                "action": "[string]입수 액션에서 실행할 액션의 종류",
                "request": "[string]액션 실행 시 사용되는 요청의 JSON 문자열"
            }
        ],
        "baseRate": "[float]기초 배율",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Experience:MultiplyAcquireActionsByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  experienceName: "[string]경험치 모델 이름"
  propertyId: "[string]프로퍼티ID"
  rateName: "[string]보상 가산 테이블 이름"
  acquireActions: 
    - action: "[string]입수 액션에서 실행할 액션의 종류"
      request: "[string]액션 실행 시 사용되는 요청의 JSON 문자열"
  baseRate: "[float]기초 배율"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("experience").acquire.multiply_acquire_actions_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    experienceName="[string]경험치 모델 이름",
    propertyId="[string]프로퍼티ID",
    rateName="[string]보상 가산 테이블 이름",
    acquireActions={
        {
            action="[string]입수 액션에서 실행할 액션의 종류",
            request="[string]액션 실행 시 사용되는 요청의 JSON 문자열"
        }
    },
    baseRate="[float]기초 배율",
    timeOffsetToken="[string]타임 오프셋 토큰",
})