未读/已读处理

 未读部分指玩家还没有执行过的剧本、已读部分则是玩家已经看过的部分。
 KAG 中,支持未读/已读部分的文字显示速度不同,已读部分的 [l] 指令无效等功能。

 未读/已读,是使用系统变量进行记录的、命名格式以 trail_ 开头。要进行未读/已读记录,请在 Config.tjs 里将 autoRecordPageShowing 设为 true 。

未读部分和已读部分

 KAG 中、未读部分/已读部分的判断是使用标签进行的。
 负责记录的系统变量以 trail_脚本文件名_标签名 这样的格式命名。例如、记录 first.ks 的 *start 标签是否已经执行过的变量,就是 sf.trail_first_start 了。
 这个变数值为 void ( 也就是未定义; 作为数值判断的话,相当于 0 ) 时表示未读、1 以上则是已读。1 以上的情况,代表执行过的次数。

 基本上、一个标签开始,一直到下一个标签,或者到 [s] 指令,这样的一个剧本段被当作一个「段落」来处理。
 例如、以下这样的剧本内容、三种颜色分别代表三个段落。

*第1段落
@cm
这里是第1段落。[l][r]
一般来说,到下一标签之前的剧本段,称为一个「段落」。[p][r]
*第2部分
@cm
这里是第2段落。[p][r]
*第3段落
@cm
这里是第3段落。[l][r]
到[[s]指令为止也算是一个「段落」。[s]

 以这些「段落」为单位、进行未读/已读的判断。

 一开始,所有段落都处在未读状态。

已读判断

 某个「段落」是否已读,原则上是这样判断的:「执行到遇到下一个标签/执行到遇到 [s] 指令」,这样的话这个「段落」就被视为已读,并在系统变数里记录。
 也就是说,玩家在「段落」执行到一半的时候,关闭程序的话,这一段就不会被记录为已读。也就是说不执行到「段落」的最后就没有效果。

剧本跳转和已读判断

 假如剧本中存在 jump 指令,或者使用 link 分歧,也就是剧本有多个分支的情况下,又和上面说的不太一样。

link 类 ( link 或 button 指令 ) 进行跳跃的情况
 这类型的指令,在玩家进行选择之后跳转到其他剧本段落时,自动记录为已读。
 例如以下的例子、

*select
这个部分,在玩家选择的时候就被判断为已读。[r]
[link target=*t1]選択肢1[endlink][r]
[link target=*t2]選択肢2[endlink][r]
@wait time=3000
@jump target=*timeout

 假如玩家在 @wait 指令的等待时间结束前,做出了选择的话,这部分会被判断为已读。顺便一说,一般的选择支都会在 link 指令后面加上 [s] ,那么在执行到 [s] 的时候就已经被判断为已读了。
 link 指令和 button 指令等等,都有 contpage 属性、将这个属性设为 false 的话,即使从这里跳跃到其他段落,原来的段落也不会被判断为已读。
jump 指令
 jump 指令进行跳跃的话,也会被自动判断为已读。jump 指令也有 coutpage 属性、设为 false 的话,即使跳转,原来的段落也不会被视为已读。
call 和 return
 call 呼叫其他剧本段落的话,原段落不会被视为已读。call 指令也具有 coutpage 属性、设为 true 的话,呼叫的时候,原来的段落被视为已读。
 retrun 指令的话,会进行既读判断 ( 注意不是进行呼叫的段落的已读判断,而是将被呼叫的段落,也就是 return 指令所在的段落被判断为已读 )。同样将 coutpage 属性设为 false 的话,就不会被判定为已读。