“Chemdah 开发者文档:自定义限制器”的版本间的差异
来自Purtmars Wikipedia —— 普特莫斯维基
(→自定义限制器) |
|||
(未显示同一用户的1个中间版本) | |||
第2行: | 第2行: | ||
= 自定义限制器 = | = 自定义限制器 = | ||
任务限制器是一种特殊的元数据类型,任务管理器会在玩家接受任务之前调用来判断玩家是否能够接受该任务。<br> | 任务限制器是一种特殊的元数据类型,任务管理器会在玩家接受任务之前调用来判断玩家是否能够接受该任务。<br> | ||
− | 目前为止 Chemdah | + | 目前为止 Chemdah 提供了四种限制器类型 ([https://github.com/TabooLib/Chemdah/blob/master/src/main/java/ink/ptms/chemdah/core/quest/meta/MetaControl.kt Github]) 分别是: |
* 脚本代理(agent) | * 脚本代理(agent) | ||
* 冷却(cooldown) | * 冷却(cooldown) | ||
第14行: | 第14行: | ||
/** | /** | ||
− | * | + | * 在触发器下签名(返回空则不支持) |
− | * 如 cooldown | + | * 在配置加载时读取触发器类型,可参考已知的四种限制器 |
+ | * 如 cooldown 可以判断是在任务的接受还是完成时签名,而 coexist 则不需要 | ||
*/ | */ | ||
abstract val trigger: Trigger? | abstract val trigger: Trigger? |
2021年5月7日 (五) 08:43的最新版本
目录
- 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
- 对话相关
- 数据相关
- 任务相关
自定义限制器
任务限制器是一种特殊的元数据类型,任务管理器会在玩家接受任务之前调用来判断玩家是否能够接受该任务。
目前为止 Chemdah 提供了四种限制器类型 (Github) 分别是:
- 脚本代理(agent)
- 冷却(cooldown)
- 共存(coexist)
- 重复(repeat)
通过继承 ink.ptms.chemdah.core.quest.meta.MetaControl$Control 类来实现自定义限制器。
1 abstract class Control {
2
3 /**
4 * 在触发器下签名(返回空则不支持)
5 * 在配置加载时读取触发器类型,可参考已知的四种限制器
6 * 如 cooldown 可以判断是在任务的接受还是完成时签名,而 coexist 则不需要
7 */
8 abstract val trigger: Trigger?
9
10 /**
11 * 玩家是否可以接受该任务
12 */
13 abstract fun check(profile: PlayerProfile, template: Template): CompletableFuture<Result>
14
15 /**
16 * 创建签名(标记)
17 * 例如什么时间接受或完成了任务
18 */
19 abstract fun signature(profile: PlayerProfile, template: Template)
20 }
我相信不需要过多描述这些方法的作用你也能明白,最后别忘记通过 TemplateEvents.ControlHook 事件注册。
1 @EventHandler
2 fun e(e: TemplateEvents.ControlHook) {
3 if (e.type == "foo") {
4 e.template = ControlFoo(e.map)
5 }
6 }