> For the complete documentation index, see [llms.txt](/llms.txt)

# GS2-Enhance 트랜잭션 액션

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





## Consume Action

소비 액션

### Gs2Enhance:DeleteProgressByUserId

사용자 ID를 지정하여 실행 중인 강화의 진행 정보를 삭제<br>

지정된 사용자의 현재 진행 중인 강화의 진행 정보 레코드를 삭제합니다.<br>
진행 중인 2단계 강화가 취소되며, 사전 계산된 경험치와 보너스 레이트는 폐기됩니다.<br>
Start 단계에서 이미 소비된 소재는 자동으로 반환되지 않습니다.

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

**반전 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2Enhance:DeleteProgressByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2Enhance:DeleteProgressByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("enhance").consume.delete_progress_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

## Acquire Action

입수 액션

### Gs2Enhance:DirectEnhanceByUserId

사용자 ID를 지정하여 강화를 실행<br>

강화 레이트 모델에 기반하여 지정된 소재를 소비해 대상 아이템 세트에 경험치를 부여합니다.<br>
획득 경험치는 레이트 모델에서 정의된 경험치 계층에 따라 소재로부터 계산되며, 보너스 레이트는 설정된 보너스 레이트 확률 테이블에서 추첨됩니다.<br>
결과에는 획득한 경험치량과 적용된 보너스 레이트가 포함됩니다.<br>
소재의 소비와 경험치 획득을 실행하기 위한 트랜잭션이 발행됩니다.

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

**반전 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| rateName | string |  | ✓|  |  ~ 128자 | 강화 레이트 모델 이름<br>강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| targetItemSetId | string |  | ✓|  |  ~ 1024자 | 강화 대상 아이템 세트의 GRN |
| materials | List&lt;Material&gt; |  | ✓|  | 1 ~ 10 items | 강화 소재 목록 |
| config | List&lt;Config&gt; |  | | [] | 0 ~ 32 items | 트랜잭션 변수에 적용할 설정값 |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2Enhance:DirectEnhanceByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "rateName": "[string]강화 레이트 모델 이름",
        "userId": "[string]사용자ID",
        "targetItemSetId": "[string]강화 대상 아이템 세트의 GRN",
        "materials": [
            {
                "materialItemSetId": "[string]강화 소재가 되는 아이템 세트의 GRN",
                "count": "[int]소비 수량"
            }
        ],
        "config": [
            {
                "key": "[string]이름",
                "value": "[string]값"
            }
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2Enhance:DirectEnhanceByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  rateName: "[string]강화 레이트 모델 이름"
  userId: "[string]사용자ID"
  targetItemSetId: "[string]강화 대상 아이템 세트의 GRN"
  materials: 
    - materialItemSetId: "[string]강화 소재가 되는 아이템 세트의 GRN"
      count: "[int]소비 수량"
  config: 
    - key: "[string]이름"
      value: "[string]값"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("enhance").acquire.direct_enhance_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    rateName="[string]강화 레이트 모델 이름",
    userId="[string]사용자ID",
    targetItemSetId="[string]강화 대상 아이템 세트의 GRN",
    materials={
        {
            materialItemSetId="[string]강화 소재가 되는 아이템 세트의 GRN",
            count="[int]소비 수량"
        }
    },
    config={
        {
            key="[string]이름",
            value="[string]값"
        }
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

### Gs2Enhance:UnleashByUserId

사용자ID를 지정하여 한계돌파를 실행<br>

GS2-Grade에서 관리하는 그레이드를 올리는 강화 처리에서 사용됩니다.<br>
그중에서도 동일 종류의 아이템을 소재로 소비하여 레벨 상한을 올리는 유형의 한계돌파에 사용됩니다.<br>

지정된 소재를 소비하는 대신 한계돌파 대상 리소스의 그레이드를 1 올릴 수 있습니다.<br>
소재가 되는 리소스가 경험치 등의 리소스를 가지고 있더라도, 그 리소스는 계승되지 않습니다.<br>
계승이 필요한 경우에는 사전에 다른 리소스로 계승하기 위한 리소스로 변환해 두어야 합니다.

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

**반전 가능한 액션: 아니오**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| rateName | string |  | ✓|  |  ~ 128자 | 강화 레이트 모델 이름<br>강화 레이트 모델 고유의 이름입니다. 영숫자 및 -(하이픈) _(밑줄) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| targetItemSetId | string |  | ✓|  |  ~ 1024자 | 한계돌파 대상 아이템 세트의 GRN |
| materials | List&lt;string&gt; |  | ✓|  | 1 ~ 1000 items | 한계돌파 소재 목록 |
| config | List&lt;Config&gt; |  | | [] | 0 ~ 32 items | 트랜잭션 변수에 적용할 설정값 |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2Enhance:UnleashByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "rateName": "[string]강화 레이트 모델 이름",
        "userId": "[string]사용자ID",
        "targetItemSetId": "[string]한계돌파 대상 아이템 세트의 GRN",
        "materials": [
            "[string]소재"
        ],
        "config": [
            {
                "key": "[string]이름",
                "value": "[string]값"
            }
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2Enhance:UnleashByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  rateName: "[string]강화 레이트 모델 이름"
  userId: "[string]사용자ID"
  targetItemSetId: "[string]한계돌파 대상 아이템 세트의 GRN"
  materials: 
    - "[string]소재"
  config: 
    - key: "[string]이름"
      value: "[string]값"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("enhance").acquire.unleash_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    rateName="[string]강화 레이트 모델 이름",
    userId="[string]사용자ID",
    targetItemSetId="[string]한계돌파 대상 아이템 세트의 GRN",
    materials={
        "[string]소재"
    },
    config={
        {
            key="[string]이름",
            value="[string]값"
        }
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

### Gs2Enhance:CreateProgressByUserId

사용자 ID를 지정하여 강화를 시작<br>

2단계 강화 플로우를 위한 진행 정보 레코드를 작성합니다.<br>
대상 아이템 세트와 소재를 레이트 모델에 대해 검증하고, 소재로부터 획득 경험치를 계산하며, 확률 테이블에서 보너스 레이트를 추첨합니다.<br>
계산된 경험치와 보너스 레이트는 진행 정보 레코드에 저장되어 End API에서 강화 완료 시 사용됩니다.<br>
force가 true인 경우, 사용자의 기존 진행 정보는 폐기되고 대체됩니다.

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

**반전 가능한 액션: 예**

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| rateName | string |  | ✓|  |  ~ 128자 | 강화 레이트 모델 이름<br>이 강화 조작의 파라미터를 정의하는 강화 레이트 모델의 이름입니다. 대상 인벤토리, 소재 인벤토리, 경험치 계층, 보너스 레이트를 지정하는 모델을 참조합니다. |
| targetItemSetId | string |  | ✓|  |  ~ 1024자 | 강화 대상 아이템 세트의 GRN |
| materials | List&lt;Material&gt; |  | |  | 0 ~ 10 items | 강화 소재 목록 |
| force | bool |  | | false |  | 이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지 |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2Enhance:CreateProgressByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "rateName": "[string]강화 레이트 모델 이름",
        "targetItemSetId": "[string]강화 대상 아이템 세트의 GRN",
        "materials": [
            {
                "materialItemSetId": "[string]강화 소재가 되는 아이템 세트의 GRN",
                "count": "[int]소비 수량"
            }
        ],
        "force": "[bool]이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지",
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2Enhance:CreateProgressByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  rateName: "[string]강화 레이트 모델 이름"
  targetItemSetId: "[string]강화 대상 아이템 세트의 GRN"
  materials: 
    - materialItemSetId: "[string]강화 소재가 되는 아이템 세트의 GRN"
      count: "[int]소비 수량"
  force: "[bool]이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("enhance").acquire.create_progress_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    rateName="[string]강화 레이트 모델 이름",
    targetItemSetId="[string]강화 대상 아이템 세트의 GRN",
    materials={
        {
            materialItemSetId="[string]강화 소재가 되는 아이템 세트의 GRN",
            count="[int]소비 수량"
        }
    },
    force="[bool]이미 시작된 강화가 있는 경우 이를 폐기하고 시작할지",
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---



