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

# GS2-SkillTree 트랜잭션 액션

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





## Consume Action

소비 액션

### Gs2SkillTree:MarkRestrainByUserId

사용자 ID를 지정하여 노드의 해방 상태를 미해방화<br>

지정된 노드가 구속 가능한지 검증한 후(의존하는 노드가 해방 상태가 아니어야 합니다), 미해방으로 마크합니다.

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

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

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| propertyId | string |  | ✓|  |  ~ 1024자 | 프로퍼티 ID<br>사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다.<br>동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다.<br>최대 1024자. |
| nodeModelNames | List&lt;string&gt; |  | ✓|  | 1 ~ 1000 items | 노드 모델 이름 목록 |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2SkillTree:MarkRestrainByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "propertyId": "[string]프로퍼티 ID",
        "nodeModelNames": [
            "[string]노드 모델명"
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2SkillTree:MarkRestrainByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  propertyId: "[string]프로퍼티 ID"
  nodeModelNames: 
    - "[string]노드 모델명"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("skillTree").consume.mark_restrain_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    propertyId="[string]프로퍼티 ID",
    nodeModelNames={
        "[string]노드 모델명"
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---

## Acquire Action

입수 액션

### Gs2SkillTree:MarkReleaseByUserId

사용자 ID를 지정하여 해방된 노드 기록<br>

지정된 노드가 해방 가능한지 검증한 후(전제 노드가 이미 해방되어 있어야 합니다), 해방됨으로 마크합니다.

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

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

|  | 타입 | 활성화 조건 | 필수 | 기본값 | 값 제한 | 설명 |
| --- | --- | --- | --- | --- | --- | --- |
| namespaceName | string |  | ✓|  |  ~ 128자 | 네임스페이스 이름<br>네임스페이스 고유의 이름입니다. 영숫자 및 -(하이픈) _(언더스코어) .(마침표)로 지정합니다. |
| userId | string |  | ✓|  |  ~ 128자 | 사용자ID<br>`#{userId}`로 설정하면 로그인 중인 사용자ID로 치환됩니다. |
| propertyId | string |  | ✓|  |  ~ 1024자 | 프로퍼티 ID<br>사용자마다 여러 개의 독립된 스킬트리 인스턴스를 가지기 위한 식별자입니다.<br>동일한 네임스페이스 내에서 플레이어가 서로 다른 캐릭터나 컨텍스트에 대해 별도의 스킬트리를 가지는 시나리오를 구현합니다.<br>최대 1024자. |
| nodeModelNames | List&lt;string&gt; |  | ✓|  | 1 ~ 1000 items | 노드 모델 이름 목록 |
| timeOffsetToken | string |  | |  |  ~ 1024자 | 타임 오프셋 토큰 |




**JSON**
```json
{
    "action": "Gs2SkillTree:MarkReleaseByUserId",
    "request": {
        "namespaceName": "[string]네임스페이스 이름",
        "userId": "[string]사용자ID",
        "propertyId": "[string]프로퍼티 ID",
        "nodeModelNames": [
            "[string]노드 모델명"
        ],
        "timeOffsetToken": "[string]타임 오프셋 토큰"
    }
}
```

**YAML**
```yaml

action: Gs2SkillTree:MarkReleaseByUserId
request:
  namespaceName: "[string]네임스페이스 이름"
  userId: "[string]사용자ID"
  propertyId: "[string]프로퍼티 ID"
  nodeModelNames: 
    - "[string]노드 모델명"
  timeOffsetToken: "[string]타임 오프셋 토큰"
```

**GS2-Script**
```lua

transaction.service("skillTree").acquire.mark_release_by_user_id({
    namespaceName="[string]네임스페이스 이름",
    userId="[string]사용자ID",
    propertyId="[string]프로퍼티 ID",
    nodeModelNames={
        "[string]노드 모델명"
    },
    timeOffsetToken="[string]타임 오프셋 토큰",
})
```


---



