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를 지정하여 미션 달성 상황 검증
지정된 사용자의 미션 태스크의 달성 상황 또는 수령 상황을 검증합니다.
수량 지정 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||||||
| missionGroupName | string | ✓ | ~ 128자 | 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. | ||||||||||||||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||||||||||||||
| verifyType | 문자열 열거형 enum { “completed”, “notCompleted”, “received”, “notReceived”, “completedAndNotReceived” } | ✓ | 검증 종류
| |||||||||||||||
| missionTaskName | string | ✓ | ~ 128자 | 미션 태스크 모델 이름 미션 태스크 모델 고유의 이름. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||||||
| multiplyValueSpecifyingQuantity | bool | false | 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 | |||||||||||||||
| timeOffsetToken | string | ~ 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를 지정하여 카운터 값 검증
지정된 사용자의 카운터의 스코프별 값이 지정된 조건을 충족하는지 검증합니다.
수량 지정 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||||||||||||||||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||||||||||||||||
| counterName | string | ✓ | ~ 128자 | 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. | ||||||||||||||||
| verifyType | 문자열 열거형 enum { “less”, “lessEqual”, “greater”, “greaterEqual”, “equal”, “notEqual” } | ✓ | 검증 종류
| |||||||||||||||||
| scopeType | 문자열 열거형 enum { “resetTiming”, “verifyAction” } | “resetTiming” | 스코프 종류 이 스코프 값이 리셋 타이밍 스케줄에 기반한 것인지, 검증 액션 조건에 기반한 것인지를 나타냅니다.
| |||||||||||||||||
| resetType | 문자열 열거형 enum { “notReset”, “daily”, “weekly”, “monthly”, “days” } | {scopeType} == “resetTiming” | ✓※ | 리셋 타이밍 이 스코프 값의 리셋 타이밍입니다. 카운터 값이 리셋될 때까지의 누적 기간을 결정합니다. scopeType이 “resetTiming"인 경우에만 적용됩니다.
※ scopeType이(가) “resetTiming” 이면 필수 | ||||||||||||||||
| conditionName | string | {scopeType} == “verifyAction” | ✓※ | ~ 128자 | 조건 이름 이 스코프 값이 대응하는 검증 액션 조건의 이름입니다. 이 값이 어느 조건 스코프에 속하는지 식별하는 데 사용됩니다. scopeType이 “verifyAction"인 경우에만 적용됩니다. ※ scopeType이(가) “verifyAction” 이면 필수 | |||||||||||||||
| value | long | 0 | 0 ~ 9223372036854775805 | 카운트 이 스코프의 누적 카운터 값입니다. 카운터가 증가하면 늘어나고 감소하면 줄어듭니다. 값은 최댓값으로 상한이 설정되며, 0 미만으로 내려가지 않습니다. | ||||||||||||||||
| multiplyValueSpecifyingQuantity | bool | false | 수량을 지정했을 때, 검증에 사용하는 값도 곱할지 여부 | |||||||||||||||||
| timeOffsetToken | string | ~ 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
미션 달성 보상 수령
지정된 사용자의 지정 미션 태스크를 수령 완료 상태로 표시합니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| missionGroupName | string | ✓ | ~ 128자 | 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. | ||
| missionTaskName | string | ✓ | ~ 128자 | 태스크 이름 | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| timeOffsetToken | string | ~ 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
여러 미션 태스크의 달성 보상을 일괄로 수령 상태로 변경
동일한 미션 그룹 내 여러 미션 태스크를 일괄로 수령 완료 상태로 표시합니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| missionGroupName | string | ✓ | ~ 128자 | 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| missionTaskNames | List<string> | ✓ | 1 ~ 100 items | 태스크 이름 리스트 | ||
| timeOffsetToken | string | ~ 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를 지정하여 카운터 감산
지정된 사용자의 카운터에서 지정한 값을 감산합니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| counterName | string | ✓ | ~ 128자 | 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| value | long | ✓ | 1 ~ 9223372036854775805 | 감산할 값 | ||
| timeOffsetToken | string | ~ 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를 지정하여 카운터 리셋
지정된 사용자의 지정된 스코프의 카운터 값을 리셋합니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| counterName | string | ✓ | ~ 128자 | 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. | ||
| scopes | List<ScopedValue> | ✓ | 1 ~ 20 items | 스코프 리스트 | ||
| timeOffsetToken | string | ~ 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
미션 달성 보상을 미수령 상태로 되돌리기
미션 태스크의 수령 상태를 미수령으로 되돌립니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| missionGroupName | string | ✓ | ~ 128자 | 미션 그룹명 이 달성 상황 레코드가 속한 미션 그룹의 이름입니다. 사용자별·미션 그룹별로 하나의 달성 상황 레코드가 존재합니다. | ||
| missionTaskName | string | ✓ | ~ 128자 | 태스크 이름 | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| timeOffsetToken | string | ~ 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 응답에서 반환됩니다.
수량 지정 가능한 액션: 예
반전 가능한 액션: 예
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| counterName | string | ✓ | ~ 128자 | 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| value | long | ✓ | 1 ~ 9223372036854775805 | 가산할 값 | ||
| timeOffsetToken | string | ~ 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 응답에서 반환됩니다.
수량 지정 가능한 액션: 아니오
반전 가능한 액션: 아니오
| 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128자 | 네임스페이스 이름 네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. | ||
| counterName | string | ✓ | ~ 128자 | 카운터 모델 이름 이 카운터 인스턴스의 기반이 되는 카운터 모델의 이름입니다. 스코프와 리셋 타이밍을 정의하는 카운터 모델 정의에 연결됩니다. | ||
| userId | string | ✓ | ~ 128자 | 사용자ID#{userId}로 설정하면 로그인 중인 사용자ID로 치환됩니다. | ||
| values | List<ScopedValue> | 0 ~ 20 items | 설정할 값의 리스트 | |||
| timeOffsetToken | string | ~ 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]타임 오프셋 토큰",
})