“Chemdah 开发者文档:会话控制”的版本间的差异
来自Purtmars Wikipedia —— 普特莫斯维基
(未显示同一用户的2个中间版本) | |||
第1行: | 第1行: | ||
{{:Chemdah 开发者文档目录}} | {{:Chemdah 开发者文档目录}} | ||
+ | |||
= 关系 = | = 关系 = | ||
对话(Conversation)与会话(Session)是两个不同的概念,如同类(Class)与对象(Object)的关系。<br> | 对话(Conversation)与会话(Session)是两个不同的概念,如同类(Class)与对象(Object)的关系。<br> | ||
第24行: | 第25行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | = ink.ptms.chemdah.core.conversation.Session = | ||
通过 '''player.conversationSession''' 扩展属性可以获取到玩家正在进行的会话,若返回空则视为玩家不在对话。 | 通过 '''player.conversationSession''' 扩展属性可以获取到玩家正在进行的会话,若返回空则视为玩家不在对话。 | ||
+ | <syntaxhighlight lang="kotlin" line="line"> | ||
+ | /** | ||
+ | * 当前会话所属对话实例 | ||
+ | */ | ||
+ | val conversation: Conversation | ||
+ | |||
+ | /** | ||
+ | * 会话坐标(指发起对话的坐标) | ||
+ | */ | ||
+ | val location: Location | ||
+ | |||
+ | /** | ||
+ | * 会话原点(指 NPC 头部坐标) | ||
+ | */ | ||
+ | val origin: Location | ||
+ | |||
+ | /** | ||
+ | * 会话所属玩家 | ||
+ | */ | ||
+ | val player: Player | ||
+ | |||
+ | /** | ||
+ | * 会话变量(指整个会话中的所有由脚本代理创建的变量) | ||
+ | * 会在下级对话中继承 | ||
+ | * 可修改 | ||
+ | */ | ||
+ | val variables: MutableMap<String, Any?> | ||
+ | |||
+ | /** | ||
+ | * 会话是否有效 | ||
+ | * 即玩家当前正在进行的会话对象是否为当前对象 | ||
+ | */ | ||
+ | val isValid: Boolean | ||
+ | get() | ||
+ | |||
+ | /** | ||
+ | * 与会话原点的距离 | ||
+ | */ | ||
+ | val distance: Boolean | ||
+ | get() | ||
+ | |||
+ | /** | ||
+ | * NPC 即将发送的信息 | ||
+ | * 仅在对话开始渲染之前可以修改 | ||
+ | */ | ||
+ | val npcSide: ArrayList<String>() | ||
+ | |||
+ | /** | ||
+ | * NPC 展示名称 | ||
+ | * 仅在对话开始渲染之前可以修改 | ||
+ | */ | ||
+ | var npcName: String | ||
+ | |||
+ | /** | ||
+ | * NPC 实例 | ||
+ | * 可能是 Minecraft 实体,也可能是其他插件的对象 | ||
+ | */ | ||
+ | var npcObject: Any? | ||
+ | |||
+ | /** | ||
+ | * NPC 是否在发言状态(动态效果) | ||
+ | * 通过修改这个属性可以提前结束发言状态 | ||
+ | */ | ||
+ | var npcTalking: Boolean | ||
+ | |||
+ | /** | ||
+ | * 玩家当前选择的回复(目前仅 Chat 模式下被应用) | ||
+ | */ | ||
+ | var playerSide: PlayerReply? | ||
+ | |||
+ | /** | ||
+ | * 玩家当前被展示的所有回复(目前仅 Chat 模式下被应用,视觉缓存) | ||
+ | */ | ||
+ | var playerReplyForDisplay: ArrayList<PlayerReply> | ||
+ | |||
+ | /** | ||
+ | * 对话是否被关闭 | ||
+ | */ | ||
+ | var isClosed: Boolean | ||
+ | |||
+ | /** | ||
+ | * 是否触发告别,如果为 true 则该会话已不可逆 | ||
+ | */ | ||
+ | var isFarewell: Boolean | ||
+ | |||
+ | /** | ||
+ | * 关闭这个会话 | ||
+ | * @param refuse 这个参数仅区别于执行的脚本代理,是 agent:refuse 主动放弃还是 agent:end 自然结束。 | ||
+ | */ | ||
+ | fun close(refuse: Boolean = false): CompletableFuture<Void> | ||
+ | </syntaxhighlight> |
2021年6月9日 (三) 16:06的最新版本
目录
- 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
- 对话相关
- 数据相关
- 任务相关
关系
对话(Conversation)与会话(Session)是两个不同的概念,如同类(Class)与对象(Object)的关系。
对话(Conversation)中包含一个核心方法:
1 /**
2 * 唤起对话
3 * 脚本代理的执行在添加对话内容之前
4 * 所有脚本包括嵌入式在内都会继承会话中的所有变量
5 *
6 * @param player 玩家
7 * @param origin 原点(对话实体的头顶坐标)
8 * @param sessionTop 上层会话(继承关系)
9 * @param npcName 对话 NPC 名称
10 * @param npcObject 对话 NPC 对象
11 */
12 fun open(
13 player: Player,
14 origin: Location,
15 sessionTop: Session? = null,
16 npcName: String? = null,
17 npcObject: Any? = null
18 ): CompletableFuture<Session>
ink.ptms.chemdah.core.conversation.Session
通过 player.conversationSession 扩展属性可以获取到玩家正在进行的会话,若返回空则视为玩家不在对话。
1 /**
2 * 当前会话所属对话实例
3 */
4 val conversation: Conversation
5
6 /**
7 * 会话坐标(指发起对话的坐标)
8 */
9 val location: Location
10
11 /**
12 * 会话原点(指 NPC 头部坐标)
13 */
14 val origin: Location
15
16 /**
17 * 会话所属玩家
18 */
19 val player: Player
20
21 /**
22 * 会话变量(指整个会话中的所有由脚本代理创建的变量)
23 * 会在下级对话中继承
24 * 可修改
25 */
26 val variables: MutableMap<String, Any?>
27
28 /**
29 * 会话是否有效
30 * 即玩家当前正在进行的会话对象是否为当前对象
31 */
32 val isValid: Boolean
33 get()
34
35 /**
36 * 与会话原点的距离
37 */
38 val distance: Boolean
39 get()
40
41 /**
42 * NPC 即将发送的信息
43 * 仅在对话开始渲染之前可以修改
44 */
45 val npcSide: ArrayList<String>()
46
47 /**
48 * NPC 展示名称
49 * 仅在对话开始渲染之前可以修改
50 */
51 var npcName: String
52
53 /**
54 * NPC 实例
55 * 可能是 Minecraft 实体,也可能是其他插件的对象
56 */
57 var npcObject: Any?
58
59 /**
60 * NPC 是否在发言状态(动态效果)
61 * 通过修改这个属性可以提前结束发言状态
62 */
63 var npcTalking: Boolean
64
65 /**
66 * 玩家当前选择的回复(目前仅 Chat 模式下被应用)
67 */
68 var playerSide: PlayerReply?
69
70 /**
71 * 玩家当前被展示的所有回复(目前仅 Chat 模式下被应用,视觉缓存)
72 */
73 var playerReplyForDisplay: ArrayList<PlayerReply>
74
75 /**
76 * 对话是否被关闭
77 */
78 var isClosed: Boolean
79
80 /**
81 * 是否触发告别,如果为 true 则该会话已不可逆
82 */
83 var isFarewell: Boolean
84
85 /**
86 * 关闭这个会话
87 * @param refuse 这个参数仅区别于执行的脚本代理,是 agent:refuse 主动放弃还是 agent:end 自然结束。
88 */
89 fun close(refuse: Boolean = false): CompletableFuture<Void>