“Chemdah 开发者文档:数据控制”的版本间的差异
来自Purtmars Wikipedia —— 普特莫斯维基
(→数据控制) |
|||
第169行: | 第169行: | ||
不难发现所有支持持久化储存的对象都有一个共同的 '''persistentDataContainer''' 属性,操作方法与 Map 无异。<br> | 不难发现所有支持持久化储存的对象都有一个共同的 '''persistentDataContainer''' 属性,操作方法与 Map 无异。<br> | ||
− | + | 合法的修改容器内的数据则不需要我们去主动执行任何同步行为,相当方便。 | |
<syntaxhighlight lang="kotlin" line="line" start=65> | <syntaxhighlight lang="kotlin" line="line" start=65> | ||
第178行: | 第178行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | 需要注意的是 DataContainer 是由 Map 实现,'''不存在递归结构。''' | + | 需要注意的是 DataContainer 是由 Map 实现,'''不存在递归结构。'''所以使用任何字符串作为键都是允许的。 |
2021年5月10日 (一) 02:10的最新版本
目录
- Chemdah
- 开始
- 基本
- 事件
- ink.ptms.chemdah.api.event.collect.ConversationEvents
- ink.ptms.chemdah.api.event.collect.ObjectiveEvents
- ink.ptms.chemdah.api.event.collect.PlayerEvents
- ink.ptms.chemdah.api.event.collect.QuestEvents
- ink.ptms.chemdah.api.event.collect.TemplateEvents
- ink.ptms.chemdah.api.event.InferEntityHookEvent
- ink.ptms.chemdah.api.event.InferItemHookEvent
- ink.ptms.chemdah.api.event.PartyHookEvent
- 对话相关
- 数据相关
- 任务相关
数据控制
数据控制分为玩家数据与任务数据,它们都是由 ink.ptms.chemdah.core.DataContainer 提供存储服务。
以下是 ink.ptms.chemdah.core.PlayerProfile 提供的所有开放属性和方法。
1 /**
2 * 玩家 UUID
3 */
4 val uniqueId: UUID
5
6 /**
7 * 玩家实例,实时获取的并非缓存
8 * 若玩家离线则会直接抛出 NullPointerException 异常
9 */
10 val player: Player
11
12 /**
13 * 玩家是否在线
14 */
15 val isPlayerOnline: Boolean
16
17 /**
18 * 玩家数据是否发生变动(玩家自身数据以及所有任务数据)
19 */
20 val isDataChanged: Boolean
21
22 /**
23 * 玩家持久化数据储存容器
24 */
25 val persistentDataContainer: DataContainer
26
27 /**
28 * 强制注册新的任务
29 * 会覆盖原有的相同任务且不会进行任何条件判断和触发事件
30 */
31 fun registerQuest(quest: Quest)
32
33 /**
34 * 强制注销任务
35 * 不会进行任何条件判断和触发事件
36 * @param release 是否从数据库释放数据
37 */
38 fun unregisterQuest(quest: Quest, release: Boolean = true)
39
40 /**
41 * 获取任务条目持久化储存容器控制器
42 */
43 fun <T> dataOperator(task: Task, func: QuestDataOperator.() -> T)
44
45 /**
46 * 通过序号获取正在进行中的有效任务
47 * @param openAPI 是否启用开放 API,即允许第三方直接修改这个结果
48 */
49 fun getQuestById(value: String, openAPI: Boolean = true): Quest?
50
51 /**
52 * 获取所有正在进行中的有效任务
53 * @param openAPI 是否启用开放 API,即允许第三方直接修改这个结果
54 */
55 fun getQuests(openAPI: Boolean = false): List<Quest>
56
57 /**
58 * 通过序号判断该任务是否已经完成
59 */
60 fun isQuestCompleted(value: String): Boolean
61
62 /**
63 * 通过模板判断该任务是否已经完成
64 */
65 fun isQuestCompleted(template: Template)
66
67 /**
68 * 通过序号判断该任务的上次完成时间
69 */
70 fun getQuestCompletedDate(value: String)
71
72 /**
73 * 通过模板判断该任务的上次完成时间
74 */
75 fun getQuestCompletedDate(template: Template)
76
77 /**
78 * 检查并保存数据
79 */
80 fun push()
以下是 ink.ptms.chemdah.core.Quest 提供的所有开放属性和方法。
1 /**
2 * 任务序号
3 */
4 val id: String
5
6 /**
7 * 任务持有者的玩家数据
8 */
9 val profile: PlayerProfile
10
11 /**
12 * 任务持久化数据储存容器
13 */
14 val persistentDataContainer: DataContainer
15
16 /**
17 * 任务模板,实时获取非缓存
18 * 若不存在则会直接抛出 NullPointerException 异常
19 */
20 val template: Template
21
22 /**
23 * 任务是否有效(即模板是否存在)
24 */
25 val isValid: Boolean
26
27 /**
28 * 任务是否完成(即所有条目已签名)
29 */
30 val isCompleted: Boolean
31
32 /**
33 * 获取所有条目
34 */
35 val tasks: Collection<Task>
36
37 /**
38 * 任务开始时间
39 */
40 val startTime: Long
41
42 /**
43 * 任务是否超时
44 */
45 val isTimeout: Boolean
46
47 /**
48 * 判断玩家是否为该任务的拥有者
49 */
50 fun isOwner(player: Player): Boolean
51
52 /**
53 * 通过序号获取条目
54 */
55 fun getTask(id: String): Task?
56
57 /**
58 * 检测任务的所有条目
59 * 当所有条目均已签名时完成任务
60 */
61 fun checkComplete()
62
63 /**
64 * 强制完成任务
65 */
66 fun completeQuest()
67
68 /**
69 * 强制放弃任务
70 */
71 fun failureQuest()
72
73 /**
74 * 强制重置任务
75 */
76 fun resetQuest()
不难发现所有支持持久化储存的对象都有一个共同的 persistentDataContainer 属性,操作方法与 Map 无异。
合法的修改容器内的数据则不需要我们去主动执行任何同步行为,相当方便。
65 init {
66 persistentDataContainer["start"] = System.currentTimeMillis()
67 profile.persistentDataContainer.remove("quest.complete.$id")
68 }
需要注意的是 DataContainer 是由 Map 实现,不存在递归结构。所以使用任何字符串作为键都是允许的。