Skip to content

拓展功能

临时版本

本节文档为临时版本,API可能随时变更。

CWL 附带了一组内置的剧本拓展方法,您可以在这里查看代码

需启用 Dialog.ExpandedActions 配置。默认启用。

在剧情表中,你可以使用 CWL 特殊动作 invoke* 或者 i* 来调用拓展方法:

参数传递

使用逗号分隔参数:

actionparamactor
invoke*/i*honk_honk(arg1, arg2)pc

大多数方法还会将 actor 单元格作为目标角色来执行该方法,例如 pctg(剧情绑定角色),或任何有效的角色id。为空时默认指定 tg

若同一行中的 jump 格存在值,则拓展方法的返回值将决定是否执行该 jump 指令。返回 true 时会执行跳转,反之则不执行。

数值表达式: +5, *10, =69, !=114 等用于判定或赋值的表达式。

拓展方法

动作

方法参数说明跳转条件
add_item物品id, 材质alias(可选), 等级(可选), 数量(可选)actor添加指定物品,默认随机材质,自动等级,数量 1总是
equip_item物品id, 材质alias(可选), 等级(可选)actor装备指定物品,默认随机材质,自动等级总是
join_party使actor加入队伍总是
join_faith信仰id(可选)使actor加入信仰,为空时则退出当前信仰成功时
apply_condition状态alias,强度actor施加状态总是
cure_condition状态aliasactor治愈状态成功时
remove_condition状态aliasactor移除状态总是
build_ext程序集名称尽可能地将指定程序集中的方法添加至剧情拓展表成功时
emit_callext.方法名调用一个外部静态方法总是

通过 build_extemit_call 调用外部程序集方法,需启用 Dialog.ExpandedActionsAllowExternal 配置。默认启用。

演出

方法参数说明跳转条件
move_next_to角色id使actor移动到同地图角色身旁总是
move_tileX, Y偏移使actor进行相对坐标移动,例如 1,1总是
move_zone区域id,层数(可选)传送actor到指定区域,默认 0总是
play_anime动画id使actor执行动画总是
play_effect特效id使actor播放特效总是
play_emote表情id使actor显示表情总是
play_screen_effect屏幕特效id播放屏幕特效总是
pop_text文本使actor发出喊叫文本(气泡框)总是
portrait_set立绘id(可选)设置actor对话立绘,为空时重置,支持Portrait文件夹自定义立绘,例如 UN_myChara_happy.png 则使用 happyUN_myChara_happy总是
show_book书籍id, 类别(BookScroll)打开一本书籍, 支持LangMod/**/Text文件夹,例如 Text/Book/ok.txt 则使用 (ok, Book)成功时

修改

方法参数说明跳转条件
mod_affinity数值表达式调整actor好感度成功时
mod_currency货币种类, 数值表达式actor修改指定的货币。money money2 plat medal influence casino_coin ecopo总是
mod_element元素alias, 强度(可选)actor修改指定元素(特质/抗性/技能等),默认强度 1,不同类型的元素使用的强度不同总是
mod_element_exp元素alias,数值表达式actor修改指定元素的经验值成功时
mod_fame数值表达式修改玩家的名声总是
mod_flagflag, 数值表达式修改actor的flag值总是
mod_keyitem关键物品alias,数值表达式(可选)修改玩家的关键物品值,默认 =1成功时

条件

这些也是拓展方法(通过 invoke* 动作调用),但是它们的返回值可以用于判定 jump 跳转。

方法参数说明跳转条件
if_affinity数值表达式检查actor好感度满足时
if_condition状态alias检查actor是否拥有状态满足时
if_currency货币种类, 数值表达式检查actor是否拥有符合的货币。money money2 plat medal influence casino_coin ecopo满足时
if_element元素alias, 数值表达式检查actor是否拥有符合的元素满足时
if_faith信仰id, 奉献等级(可选)检查actor是否加入特定信仰且不少于特定等级,默认 0满足时
if_fame数值表达式检查玩家名声满足时
if_flagflag, 数值表达式检查actor的flag值满足时
if_keyitem关键物品alias, 数值表达式(可选)检查玩家是否拥有符合表达式的关键物品值,默认 >0满足时
if_race种族id检查actor是否为对应种族满足时
if_tag标签检查actor是否拥有标签满足时
if_zone区域id, 层数(可选)检查actor所在区域满足时

有三种特殊的复合条件,它们将上述条件作为参数:

方法示例跳转条件
andand(if_flag(flag1, >0), if_flag(flag2, <0))全部满足时
oror(if_race(lich), if_race(snail))任意满足时
notnot(if_zone(dungeon), if_zone(field), if_zone(underground))全部不满足时

if_flag 还是 hasFlag

if 列中的 hasFlag 是一个静态条件,仅在剧情表加载时判定一次,这意味着之后更改的flag值不会产生影响,除非使用 reload 动作或 重新打开剧情表。CWL 的 if_flag() 扩展条件是动态的,也可以用于剧情分支。

实现自定义方法

CWL 提供了简单的 API,允许您在自己的脚本 DLL 中添加拓展方法,甚至无需引用 CWL 的程序集。