---
sidebarDepth: 1
---
# 自定义成就系统
## AddNodeProgress
服务端
method in mod.server.component.achievementCompServer.AchievementCompServer
- 描述
增加对应玩家的对应成就节点的成就进度
- 参数
| 参数名 |
数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家ID |
| nodeId | str | 节点ID |
| delta | int | 增加该节点进度的值,只能填写大于0的正整数 |
| callback | function | 请求回调函数,如果节点的json配置了为云节点,则调用此接口必须填写此参数,否则无法传到云端 |
| getExtra | function | 用于返回存储更新后的数据的函数,用于云成就节点,返回值必须为str类型,可选 |
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否设置成功,当为云成就上报的时候,True表示上报了,具体情况请查阅callback函数的参数信息,False表示未上报 |
- 备注
- callback需要接受一个参数
当请求**失败**时,参数返回None。
当请求**成功**时,参数为一个dict,包含返回码,最新数据等信息。
- 当code为0时,表示设置成功。
- 当code为5时,表示数据冲突,此时系统不会存储此次上传的数据,当开发者通过callback处理完冲突后,必须返回一个Bool值。当callback的返回值为True,系统会自动再自动调用一次getExtra来获取最新的extra数据,并自动存储进度与extra。如果不想系统再自动调用,将callback返回值设置为False,系统将不会再进行一次进度存储,可选
- 示例
```python
import mod.server.extraServerApi as serverApi
def cb(data):
if data:
print { {}.format(data["entity"]) }
else:
print "获取数据失败"
def get():
return extraData
comp = serverApi.GetEngineCompFactory().CreateAchievement(levelId)
#增加该玩家成就进度:
comp.AddNodeProgress(playerId, nodeId, delta, callback = cb, getExtra = get)
```
## GetChildrenNode
服务端
method in mod.server.component.achievementCompServer.AchievementCompServer
- 描述
获得该成就节点的下一级所有孩子节点的list
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| nodeId | str | 节点ID |
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| list(str) | 返回值为是否设置成功,成功为该节点的下一级所有孩子节点的list,失败为None |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAchievement(levelId)
#获得该成就节点的下一级所有孩子节点的list:
NodeChildren = comp.GetChildrenNode(nodeId)
```
## GetNodeDetailInfo
服务端
method in mod.server.component.achievementCompServer.AchievementCompServer
- 描述
获取对应玩家的对应节点信息
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家ID |
| nodeId | str | 节点ID |
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| dict | 获取成功为对应玩家的对应节点的所有信息,包括json内的所有信息,外加一个“progress”属性用来存储该玩家该节点的进度,失败为None |
- 备注
- 该接口获取到的信息只有json里面配置的信息,如果可选内容不配,该接口获取不到不配的可选内容信息
- 不可在“AddServerPlayerEvent”和"ClientLoadAddonsFinishServerEvent"事件中调用该接口
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateAchievement(levelId)
#获取信息:
NodeDetail = comp.GetNodeDetailInfo(playerId, nodeId)
```
## SetNodeFinish
服务端
method in mod.server.component.achievementCompServer.AchievementCompServer
- 描述
设置对应玩家的对应成就节点完成
- 参数
| 参数名 | 数据类型
| 说明 |
| :--- | :--- | :--- |
| playerId | str | 玩家ID |
| nodeId | str | 节点ID |
| callback | function | 请求回调函数,如果节点的json配置了为云节点,则调用此接口必须填写此参数,否则无法传到云端 |
| getExtra | function | 用于返回存储更新后的数据的函数,用于云成就节点,返回值必须为str类型,可选 |
- 返回值
| 数据类型
| 说明 |
| :--- | :--- |
| bool | 是否设置成功,当为云成就上报的时候,True表示上报了,具体情况请查阅callback函数的参数信息,False表示未上报 |
- 备注
- callback需要接受一个参数
当请求**失败**时,参数返回None。
当请求**成功**时,参数为一个dict,包含返回码,最新数据等信息。
- 当code为0时,表示设置成功。
- 当code为5时,表示数据冲突,此时系统不会存储此次上传的数据,当开发者通过callback处理完冲突后,必须返回一个Bool值。当callback的返回值为True,系统会自动再自动调用一次getExtra来获取最新的extra数据,并自动存储进度与extra。如果不想系统再自动调用,将callback放回值设置为False,系统将不会再进行一次进度存储,可选
- 示例
```python
import mod.server.extraServerApi as serverApi
def cb(data):
if data:
print { {}.format(data["entity"]) }
else:
print "获取数据失败"
def get():
return extraData
comp = serverApi.GetEngineCompFactory().CreateAchievement(levelId)
#设置该成就完成:
comp.SetNodeFinish(playerId, nodeId, callback = cb, getExtra = get)
```