Documentation index for AI agents

GS2-Mission 트랜잭션 액션

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

액션의 조합과 동시 실행

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

GS2-Mission의 트랜잭션 액션은 2종류의 대상을 다룹니다.

  • 카운터 : 네임스페이스·사용자·카운터 이름의 조합으로 결정됩니다. 리셋 종별마다 하나씩 값을 보관합니다.
  • 미션 그룹의 진행 상황 : 네임스페이스·사용자·미션 그룹의 조합으로 결정됩니다. 어떤 태스크를 달성했는지, 어떤 보상을 수령했는지를 태스크 단위로 보관합니다.
조작같은 행을 겹쳤을 때중첩 너머다른 대상이 되는 경계
카운터의 가산
IncreaseCounterByUserId
통합되어 값이 합산된다합산된다네임스페이스·사용자·카운터 이름
카운터의 감산
DecreaseCounterByUserId
통합되어 값이 합산된다실패한다네임스페이스·사용자·카운터 이름
카운터의 리셋
ResetCounterByUserId
스코프가 결합되어 1건이 된다. 합계가 20 스코프를 넘으면 결합을 중단하고 두 번째 이후가 조용히 버려진다실패한다네임스페이스·사용자·카운터 이름
카운터의 설정
SetCounterByUserId
같은 값이면 통합. 값이 다르면 발행 시에 오류실패한다네임스페이스·사용자·카운터 이름
보상의 수령
ReceiveByUserId BatchReceiveByUserId
1건으로 묶이며 태스크 이름이 중복을 제외하고 결합된다실패한다네임스페이스·사용자·미션 그룹
수령의 취소
RevertReceiveByUserId
같은 태스크이면 통합. 태스크가 다르면 발행 시에 오류실패한다네임스페이스·사용자·미션 그룹
검증 액션 전반먼저 지정한 쪽이 남음. VerifyCounterValueByUserId는 임계값이 다른 경우에만 양쪽이 판정된다읽기만 하므로 충돌하지 않는다대상·검증 타입·임계값

카운터는 가산만이 순수한 증분으로 기록되고, 그 외에는 카운터 전체를 다시 씁니다. 그래서 가산은 중첩 너머에서도 합류하지만, 감산·리셋·설정은 경계가 같은 다른 행과 함께 둘 수 없습니다. 감산끼리 문제없는 것은 실행 전에 하나의 감산으로 통합되기 때문입니다.

다른 태스크의 수령 취소를 하나의 트랜잭션에 나열하지 말아 주십시오. 취소의 기록 대상은 미션 그룹 단위의 1행이므로, 태스크 단위로 경계를 나눌 수 없습니다. 같은 태스크의 취소는 몇 개를 나열해도 중복이 제거되어 1건이 되지만, 다른 태스크의 취소를 두 개 나열하면 오류(400)가 됩니다. 이 검사는 획득 액션을 모으는 시점에 실행되므로, 트랜잭션을 발행하는 API뿐만 아니라 보상을 미리 확인하기만 하는 API에서도 같은 오류가 됩니다. 수령은 일괄 수령으로 묶어 해결했지만, 취소에는 배열을 받는 API가 없어 같은 방법을 쓸 수 없습니다.

같은 미션 그룹의 수령은 몇 개를 나열해도 1건의 일괄 수령으로 묶입니다. 같은 태스크를 두 번 작성해도 중복이 제거될 뿐 오류가 되지 않습니다. 묶은 결과의 태스크 수가 수령 측의 상한을 넘은 경우에만, 실행 시에 지정 수 초과 오류(400)가 됩니다.

표에 없는 조합이 하나 있습니다. 같은 트랜잭션에서 달성한 태스크의 보상을 수령할 수는 없습니다. 달성은 카운터 가산의 결과로 기록되지만, 수령은 트랜잭션 시작 시점의 진행 상황을 보므로 그 달성이 아직 보이지 않습니다. 트랜잭션을 나누어 주십시오.

한 번에 다수의 태스크를 수령하면 1회에 확인할 수 있는 양의 내부 상한에 도달할 수 있습니다. 대략 하나의 트랜잭션에서 수령하는 태스크가 십수 건을 넘는 부근부터 일어날 수 있습니다. 다수의 보상을 수령하는 트랜잭션이 실패하는 경우에는 여러 트랜잭션으로 나누어 주십시오.

검증 액션은 트랜잭션 시작 시점의 상태를 봅니다. 같은 트랜잭션에서 도달하는 카운터의 값이나 달성을 검증할 수는 없습니다.

중첩된 트랜잭션에 주의

카운터의 가산은 중첩 너머에서도 안전합니다. 어느 경로로 도착하든 한 번의 업데이트로 묶입니다. 진행 상황도 태스크가 다른 한 안전합니다.

카운터의 감산·리셋·설정은 다릅니다. 같은 카운터를 안쪽과 바깥쪽 양쪽에서 건드리면 트랜잭션이 실패합니다. 보상이나 추첨이 미션의 카운터를 움직이고 있지 않은지 확인해 주십시오.

제한을 회피하고 싶은 경우

카운터의 가산과 설정, 수령의 취소는 획득 액션, 카운터의 감산·리셋과 보상의 수령은 소비 액션입니다. 가산과 설정의 충돌은 acquireActionUseJobQueue를 활성화하면 해소되지만, 감산·리셋과의 공존이나 같은 태스크의 보상을 두 번 수령하는 것은 소비 액션끼리이므로 enableAtomicCommit을 비활성화하지 않으면 해소되지 않습니다. 다른 태스크의 수령 취소는 어느 설정으로도 회피할 수 없습니다. 검사는 트랜잭션 발행 시, 설정이 적용되기 전에 실행됩니다. 트랜잭션을 나누어 주십시오.

동시 실행과 재시도

카운터의 가산은 동시 실행 요청이 몇 개 겹쳐도 충돌하지 않습니다. 같은 미션 그룹이라도 달성·수령의 대상 태스크가 다르면 충돌하지 않습니다.

카운터의 감산·리셋·설정, 같은 태스크의 수령, 관리 콘솔이나 서버 API에서의 변경은 리비전 대조를 수반하는 기록이므로, 같은 대상에 대한 다른 업데이트와 겹치면 충돌(409)이 반환될 수 있습니다. 카운터의 리셋 경계를 넘은 경우에도 일어납니다. 요청 내용에 문제가 있는 것은 아니므로, 재시도하면 성공합니다.


Verify Action

검증 액션

Gs2Mission:VerifyCompleteByUserId

사용자 ID를 지정하여 미션 달성 상황 검증

지정된 사용자의 미션 태스크의 달성 상황 또는 수령 상황을 검증합니다.

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

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
missionGroupNamestring
~ 128자미션 그룹명
이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
verifyType문자열 열거형
enum {
  “completed”,
  “notCompleted”,
  “received”,
  “notReceived”,
  “completedAndNotReceived”
}
검증 종류
정의설명
completed조건이 달성 완료 상태임
notCompleted조건이 미달성 상태임
received보상이 수령 완료 상태임
notReceived보상이 미수령 상태임
completedAndNotReceived조건이 달성 완료 상태이고 보상이 미수령 상태임
missionTaskNamestring
~ 128자미션 태스크 모델 이름
미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
multiplyValueSpecifyingQuantityboolfalse수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:VerifyCompleteByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "missionGroupName": "[string]미션 그룹명",
        "userId": "[string]사용자ID",
        "verifyType": "[string]검증 종류",
        "missionTaskName": "[string]미션 태스크 모델 이름",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:VerifyCompleteByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  missionGroupName: "[string]미션 그룹명"
  userId: "[string]사용자ID"
  verifyType: "[string]검증 종류"
  missionTaskName: "[string]미션 태스크 모델 이름"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").verify.verify_complete_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    missionGroupName="[string]미션 그룹명",
    userId="[string]사용자ID",
    verifyType="[string]검증 종류",
    missionTaskName="[string]미션 태스크 모델 이름",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Mission:VerifyCounterValueByUserId

사용자 ID를 지정하여 카운터 값 검증

지정된 사용자의 카운터의 스코프별 값이 지정된 조건을 충족하는지 검증합니다.

수량 지정 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
counterNamestring
~ 128자카운터 모델 이름
이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다.
verifyType문자열 열거형
enum {
  “less”,
  “lessEqual”,
  “greater”,
  “greaterEqual”,
  “equal”,
  “notEqual”
}
검증 종류
정의설명
less카운터 값이 지정 값 미만임
lessEqual카운터 값이 지정 값 이하임
greater카운터 값이 지정 값 초과임
greaterEqual카운터 값이 지정 값 이상임
equal카운터 값이 지정 값과 일치함
notEqual카운터 값이 지정 값과 일치하지 않음
scopeType문자열 열거형
enum {
  “resetTiming”,
  “verifyAction”
}
“resetTiming”스코프 종류
이 스코프 값이 리셋 타이밍 스케줄에 기반한 것인지, 검증 액션 조건에 기반한 것인지를 나타냅니다.
정의설명
resetTiming리셋 타이밍
verifyAction검증 액션
resetType문자열 열거형
enum {
  “notReset”,
  “daily”,
  “weekly”,
  “monthly”,
  “days”
}
{scopeType} == “resetTiming”
✓※
리셋 타이밍
이 스코프 값의 리셋 타이밍입니다. 카운터 값이 리셋될 때까지의 누적 기간을 결정합니다. scopeType이 “resetTiming"인 경우에만 적용됩니다.
정의설명
notReset리셋 안 함
daily매일
weekly매주
monthly매월
days일정 일수마다
※ scopeType이(가) “resetTiming” 이면 필수
conditionNamestring{scopeType} == “verifyAction”
✓※
~ 128자조건 이름
이 스코프 값이 대응하는 검증 액션 조건의 이름입니다. 이 값이 어느 조건 스코프에 속하는지 식별하는 데 사용됩니다. scopeType이 “verifyAction"인 경우에만 적용됩니다.
※ scopeType이(가) “verifyAction” 이면 필수
valuelong00 ~ 9223372036854775805카운트
이 스코프의 누적 카운터 값입니다. 카운터가 증가하면 늘어나고 감소하면 줄어듭니다. 값은 최댓값으로 상한이 설정되며, 0 미만으로 내려가지 않습니다.
multiplyValueSpecifyingQuantityboolfalse수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:VerifyCounterValueByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "counterName": "[string]카운터 모델 이름",
        "verifyType": "[string]검증 종류",
        "scopeType": "[string]스코프 종류",
        "resetType": "[string]리셋 타이밍",
        "conditionName": "[string]조건 이름",
        "value": "[long]카운트",
        "multiplyValueSpecifyingQuantity": "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:VerifyCounterValueByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  counterName: "[string]카운터 모델 이름"
  verifyType: "[string]검증 종류"
  scopeType: "[string]스코프 종류"
  resetType: "[string]리셋 타이밍"
  conditionName: "[string]조건 이름"
  value: "[long]카운트"
  multiplyValueSpecifyingQuantity: "[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").verify.verify_counter_value_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    counterName="[string]카운터 모델 이름",
    verifyType="[string]검증 종류",
    scopeType="[string]스코프 종류",
    resetType="[string]리셋 타이밍",
    conditionName="[string]조건 이름",
    value="[long]카운트",
    multiplyValueSpecifyingQuantity="[bool]수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Consume Action

소비 액션

Gs2Mission:ReceiveByUserId

미션 달성 보상 수령

지정된 사용자의 지정 미션 태스크를 수령 완료 상태로 표시합니다.

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

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
missionGroupNamestring
~ 128자미션 그룹명
이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다.
missionTaskNamestring
~ 128자태스크 이름
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:ReceiveByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "missionGroupName": "[string]미션 그룹명",
        "missionTaskName": "[string]태스크 이름",
        "userId": "[string]사용자ID",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:ReceiveByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  missionGroupName: "[string]미션 그룹명"
  missionTaskName: "[string]태스크 이름"
  userId: "[string]사용자ID"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").consume.receive_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    missionGroupName="[string]미션 그룹명",
    missionTaskName="[string]태스크 이름",
    userId="[string]사용자ID",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Mission:BatchReceiveByUserId

여러 미션 태스크의 달성 보상을 일괄로 수령 상태로 변경

동일한 미션 그룹 내 여러 미션 태스크를 일괄로 수령 완료 상태로 표시합니다.

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
missionGroupNamestring
~ 128자미션 그룹명
이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
missionTaskNamesList<string>
1 ~ 100 items태스크 이름 리스트
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:BatchReceiveByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "missionGroupName": "[string]미션 그룹명",
        "userId": "[string]사용자ID",
        "missionTaskNames": [
            "[string]태스크 이름"
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:BatchReceiveByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  missionGroupName: "[string]미션 그룹명"
  userId: "[string]사용자ID"
  missionTaskNames: 
    - "[string]태스크 이름"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").consume.batch_receive_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    missionGroupName="[string]미션 그룹명",
    userId="[string]사용자ID",
    missionTaskNames={
        "[string]태스크 이름"
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Mission:DecreaseCounterByUserId

사용자 ID를 지정하여 카운터 감산

지정된 사용자의 카운터에서 지정한 값을 감산합니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
counterNamestring
~ 128자카운터 모델 이름
이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
valuelong
1 ~ 9223372036854775805감산할 값
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:DecreaseCounterByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "counterName": "[string]카운터 모델 이름",
        "userId": "[string]사용자ID",
        "value": "[long]감산할 값",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:DecreaseCounterByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  counterName: "[string]카운터 모델 이름"
  userId: "[string]사용자ID"
  value: "[long]감산할 값"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").consume.decrease_counter_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    counterName="[string]카운터 모델 이름",
    userId="[string]사용자ID",
    value="[long]감산할 값",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Mission:ResetCounterByUserId

사용자 ID를 지정하여 카운터 리셋

지정된 사용자의 지정된 스코프의 카운터 값을 리셋합니다.

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
counterNamestring
~ 128자카운터 모델 이름
이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다.
scopesList<ScopedValue>
1 ~ 20 items스코프 리스트
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:ResetCounterByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "counterName": "[string]카운터 모델 이름",
        "scopes": [
            {
                "scopeType": "[string]스코프 종류",
                "resetType": "[string]리셋 타이밍",
                "conditionName": "[string]조건 이름",
                "value": "[long]카운트",
                "nextResetAt": "[long]다음 리셋 타이밍",
                "updatedAt": "[long]최종 갱신일시"
            }
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:ResetCounterByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  counterName: "[string]카운터 모델 이름"
  scopes: 
    - scopeType: "[string]스코프 종류"
      resetType: "[string]리셋 타이밍"
      conditionName: "[string]조건 이름"
      value: "[long]카운트"
      nextResetAt: "[long]다음 리셋 타이밍"
      updatedAt: "[long]최종 갱신일시"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").consume.reset_counter_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    counterName="[string]카운터 모델 이름",
    scopes={
        {
            scopeType="[string]스코프 종류",
            resetType="[string]리셋 타이밍",
            conditionName="[string]조건 이름",
            value="[long]카운트",
            nextResetAt="[long]다음 리셋 타이밍",
            updatedAt="[long]최종 갱신일시"
        }
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Acquire Action

입수 액션

Gs2Mission:RevertReceiveByUserId

미션 달성 보상을 미수령 상태로 되돌리기

미션 태스크의 수령 상태를 미수령으로 되돌립니다.

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

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
missionGroupNamestring
~ 128자미션 그룹명
이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다.
missionTaskNamestring
~ 128자태스크 이름
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:RevertReceiveByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "missionGroupName": "[string]미션 그룹명",
        "missionTaskName": "[string]태스크 이름",
        "userId": "[string]사용자ID",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:RevertReceiveByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  missionGroupName: "[string]미션 그룹명"
  missionTaskName: "[string]태스크 이름"
  userId: "[string]사용자ID"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").acquire.revert_receive_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    missionGroupName="[string]미션 그룹명",
    missionTaskName="[string]태스크 이름",
    userId="[string]사용자ID",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Mission:IncreaseCounterByUserId

사용자 ID를 지정하여 카운터를 가산

지정된 사용자의 카운터에 지정한 값을 가산합니다.
가산 후, 이 카운터를 참조하는 모든 미션 태스크가 자동으로 재평가되며, 새롭게 달성된 미션은 changedCompletes 응답에서 반환됩니다.

수량 지정 가능한 액션: 예

반전 가능한 액션: 예

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
counterNamestring
~ 128자카운터 모델 이름
이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
valuelong
1 ~ 9223372036854775805가산할 값
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:IncreaseCounterByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "counterName": "[string]카운터 모델 이름",
        "userId": "[string]사용자ID",
        "value": "[long]가산할 값",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:IncreaseCounterByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  counterName: "[string]카운터 모델 이름"
  userId: "[string]사용자ID"
  value: "[long]가산할 값"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").acquire.increase_counter_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    counterName="[string]카운터 모델 이름",
    userId="[string]사용자ID",
    value="[long]가산할 값",
    timeOffsetToken="[string]타임 오프셋 토큰",
})

Gs2Mission:SetCounterByUserId

사용자 ID를 지정하여 카운터를 설정

지정된 사용자의 카운터의 스코프 값을 직접 설정하여 기존 값을 대체합니다.
변경 전과 변경 후의 카운터 상태, 그리고 새롭게 달성된 미션이 changedCompletes 응답에서 반환됩니다.

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

반전 가능한 액션: 아니오

타입활성화 조건필수기본값값 제한설명
namespaceNamestring
~ 128자네임스페이스 이름
네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다.
counterNamestring
~ 128자카운터 모델 이름
이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다.
userIdstring
~ 128자사용자ID
#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다.
valuesList<ScopedValue>0 ~ 20 items설정할 값의 리스트
timeOffsetTokenstring~ 1024자타임 오프셋 토큰
{
    "action": "Gs2Mission:SetCounterByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "counterName": "[string]카운터 모델 이름",
        "userId": "[string]사용자ID",
        "values": [
            {
                "scopeType": "[string]스코프 종류",
                "resetType": "[string]리셋 타이밍",
                "conditionName": "[string]조건 이름",
                "value": "[long]카운트",
                "nextResetAt": "[long]다음 리셋 타이밍",
                "updatedAt": "[long]최종 갱신일시"
            }
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
action: Gs2Mission:SetCounterByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  counterName: "[string]카운터 모델 이름"
  userId: "[string]사용자ID"
  values: 
    - scopeType: "[string]스코프 종류"
      resetType: "[string]리셋 타이밍"
      conditionName: "[string]조건 이름"
      value: "[long]카운트"
      nextResetAt: "[long]다음 리셋 타이밍"
      updatedAt: "[long]최종 갱신일시"
  timeOffsetToken: "[string]타임 오프셋 토큰"
transaction.service("mission").acquire.set_counter_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    counterName="[string]카운터 모델 이름",
    userId="[string]사용자ID",
    values={
        {
            scopeType="[string]스코프 종류",
            resetType="[string]리셋 타이밍",
            conditionName="[string]조건 이름",
            value="[long]카운트",
            nextResetAt="[long]다음 리셋 타이밍",
            updatedAt="[long]최종 갱신일시"
        }
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})