👽 wsmud_Raid 2.3.x 自定义工作流程开发指南
-
更新记录
最新更新信息,请前往 更新日志区 查看。
2.3.0
新增预置方法
(:cd <param>)
、(:status <param>)
。2.2.2
新增静默等待语句 @await。
2.2.1
新增预置变量:
(:id)
、(:day)
、(:date)
、(:hour)
、(:minute)
、(:second)
。2.2.0
新增了子流程语法。
简介
使用 wsmud_Raid 2.x.x 可以简便地自定义一个流程。
相较于 1.x.x 只支持 if 语句,2.x.x 支持
[if]
、[else if]
、[else]
、[while]
、[continue]
、[break]
等更多的控制语句。wsmud_Raid 2.1.x 中提供的几乎所有的副本的都是通过类似于下方的 (困难移花宫的) 流程实现的:
不要怕,这个流程扫一眼即可,下面会拣其中的几个典型语句解释。
<--- [if] (:hpPer)<0.8 @liaoshang ---> jh fb 22 start1;cr huashan/yihua/shandao go south[7] go south[7] @kill 花月奴 go south;go south @kill 移花宫女弟子,移花宫女弟子 go south @kill 移花宫女弟子,移花宫女弟子 [if] (_DungeonWaitSkillCD) == 打开 @cd go southeast @kill 涟星 [if] (_DungeonWaitSkillCD) == 打开 @cd go northwest;go southwest @kill 邀月 look hua @tip 你数了下大概有($number)朵花 go southeast look bed;pushstart bed;pushleft bed[(number)] pushright bed[8] go down;fire;go west @kill 花无缺 look xia;open xia
复制上方代码下面先拿其中一条语句来简单看看:
<--- [if] (:hpPer)<0.8 @liaoshang --->
复制上方代码- 被
<---
和--->
包围起来的语句是守护语句,它不会立即执行,但是当在其下方的每一条语句执行完毕时,都会执行该条守护语句; [if] (:hpPer)<0.8
是一个条件控制,只有满足该条件才会执行后面语句;- 上面条件控制中
(:hpPer)
是使用了一个预置变量,表示角色的气血剩余百分比; @liaoshang
是一条**@语句**,它会执行疗伤直至角色气血回满 (,才会执行接下来的语句)。
所以这条语句就实现了角色每次行动后,都会检查气血是否少于 80%;若是,就会自动疗伤,直至回满气血后才会执行接下来的语句。
再来看另外几条语句:
look hua @tip 你数了下大概有($number)朵花 ... pushleft bed[(number)]
复制上方代码- 在
@tip 你数了下大概有($number)朵花
中我们等待获取包含 ”你数了下大概有?朵花“ 的系统提示,并创建了一个名为number
的变量来保存花朵数目 (假设为 3); - 在
pushleft bed[(number)]
中我们使用了上面创建的变量number
,所以语句会变成pushleft bed[3]
; pushleft bed[3]
等价于pushleft bed;pushleft bed;pushleft bed
,即向左推动床 3 次。
于是,就这样,我们实现了观察左侧 Boss 房间的花朵数,并推动床相应次数的需求。
欢迎使用 wsmud_Raid 自定义流程功能编写你自己需要的流程。
如果想要了解更多,请向下阅读。
- 被
-
1. 系统指令 和 $指令
$指令 是 wsmud_pluginss 提供的便捷组合指令;大多数 $指令 是由多条系统指令组合而成的。
多条系统指令 (及 $指令) 可用
;
连接成为一条语句,一条语句中的系统指令会同时执行。例如:
$to 扬州城-武庙;liaoshang
复制上方代码注意:同时执行太多系统指令可能会导致服务器拒绝执行,建议控制同时执行的系统指令条数。
$指令 的使用参见 wsmud_pluginss 主页
简写多条重复系统指令
可以在系统指令后跟随
[数字]
,表示该语句重复的次数,例如:go west[3];go north go west;go west;go west;go north
复制上方代码上述的两条语句是等价的。
2. id 占位符
可以使用形如 {物品名称} 的方式指代 NPC 或物品 id,执行时会自动进行替换,例如:
select {r崔莺莺};ask {r崔莺莺} about 东厢
复制上方代码id 占位符的格式如下:
{<位置><关键字><品质><是否为精确查找><获取数量>}<可为 null 否>
除了关键字外,其他均为可选参数,下面来介绍这些可选参数:
位置
-
r: room 房间内
-
b: bag 包裹内
-
d: dialog 最近打开的列表面板内(目前支持仓库列表和商人列表)
执行打开列表面板的系统命令后,需要调用
@dialog
以等待列表面板的确实打开,之后再使用 id 占位符。
如果未指定位置:
- 也未指定品质,则会按照房间内、包裹内、列表面板内的顺序查找
- 但指定了品质,则会按照包裹内、列表面板内的顺序查找
品质
对于物品,可以指定品质:
- g:green 绿色
- b:blue 蓝色
- y:yellow 黄色
- p:purple 紫色
- o: orange 橙色
- r:red 红色
如果物品名称是从系统提示中截取的,则已包含品质信息可直接使用:
@tip 你从平一指购买了一枚($pill)。 use {b(pill)}
复制上方代码建议指代物品时指定其品质。
是否为精确查找
默认使用模糊查找,即目标 NPC 或物品名称包含
{}
中给出的关键字即可。添加
%
表示进行精确查找,物品名称必须完全吻合{}
中给出的关键字。例如,下面语句中的前者就是精确查找:select {r财主女儿 崔莺莺%};ask {r崔莺莺} about 东厢
复制上方代码获取数量
如果希望获取数量而非 id,则可通过添加
#
标明。例如,将武道残页保存到仓库:[if] {b武道残页o%}? != null store {b武道残页o%#} {b武道残页o%}
复制上方代码可为 null 否
默认会持续等待,直到找到该 NPC 或物品。
为什么要如此设置?例如:
go west
ok {r丫鬟}
go west 后的房间信息需要等待服务器返回,{r丫鬟} 会持续等到房间信息(包含房间内的 NPC 信息)返回,以便获取丫鬟的 id。如果允许找不到,则需要添加
?
,未找到则为null
。[if] {b蒙古g}? != null fenjie {b蒙古g}?
复制上方代码3. 变量使用
定义、赋值变量
可以使用形如
($变量名)=初始值
的语句定义一个变量并初始化,或修改已存在变量的值,例如:($number)=3
复制上方代码请使用 大小写字母、数字、_ (下划线) 组成变量名。
不要定义
_
开头的变量,Raid 自身使用此类变量名。有些 @语句 (下文会介绍) 也可以定义变量。
使用变量
在随后的语句中均可以
(变量名)
形式使用之前定义的变量,例如:go west[(number)]
复制上方代码变量的作用范围
-
若变量名开头大写则表示是全局变量,将会持久化保存;
即,在一个流程中定义的全局变量,可以在另外一个流程中使用;在一个流程中修改某个全局变量的值,其他流程运行时将会使用该全局变量的这个新值。
-
若变量名开头小写则只能在流程的当前执行过程中使用;
算术运算
支持右侧为算数运算表达式例如:
($number)=(number)+1
算术运算符:
+
、-
、*
、/
、%
预置变量
wsmud_raid 预置了以下变量,可以直接使用:
变量 含义 值 :id 角色 id :hp 角色当前气血值 :maxHp 角色当前最大气血值 :hpPer 角色当前气血剩余百分比 0-1 :mp 角色当前内力值 :maxMp 角色当前最大内力值 :mpPer 角色当前内力剩余百分比 0-1 :living 角色是否活着 true,false :state 角色状态 发呆,疗伤,打坐,挖矿,工作,练习,学习 :combating 角色是否在战斗中 true,false :free 角色是否自由的(无忙乱等状态) true,false :room 角色当前所在房间名称 如:扬州城-广场 :path 角色当前所在房间路径 如:yz/guangchang :eq0 角色装备的武器 id :eq1 角色装备的衣服 id :eq2 角色装备的鞋 id :eq3 角色装备的头部 id :eq4 角色装备的披风 id :eq5 角色装备的戒指 id :eq6 角色装备的项链 id :eq7 角色装备的饰品 id :eq8 角色装备的护腕 id :eq9 角色装备的腰带 id :eq10 角色装备的暗器 id :kf_quan 角色装备的拳脚技能 sid :kf_nei 角色装备的内功技能 sid :kf_zhao 角色装备的招架技能 sid :kf_qing 角色装备的轻功技能 sid :kf_jian 角色装备的剑法技能 sid :kf_dao 角色装备的刀法技能 sid :kf_gun 角色装备的棍法技能 sid :kf_bian 角色装备的鞭法技能 sid :kf_an 角色装备的暗器技能 sid :day 当前星期几 1-7 :date 当前日期 1-31 :hour 当前小时 0-23 :minute 当前分钟 0-59 :second 当前秒 0-59 4. 条件控制
由
[if]
、[else if]
、[else]
三个语句进行控制。满足条件后执行的语句必须在其下方一行,且前面包含至少一个空格(建议 2 或 4 个,且整个代码保持一致)。
($open)=没开 look men;open men;go east @tip 你不会撬锁|钥匙($open)了秘门 [if] (open) == 打开 go east;ok {r丫鬟} go west;go south;go south go north;go north;go west [else] go west
复制上方代码比较运算符
==
、!=
、>
、<
、>=
、<=
逻辑运算符
或
||
、且&&
、非!
5. 循环控制
由
[while]
、[continue]
、[break]
三个语句进行控制。($number)=0 [while] (number) < 10 go north [if] (:room)==扬州城-广场 [break] ($number) = (number) + 1
复制上方代码
-
-
Raid API
1. @语句
很多系统指令 (如疗伤: liaoshang) 执行后需要一定时间才会结束;后续指令需要等待其运行结束再调用才能正常运行。
为此,可以设置等待时间,也可以采取各种手段来判断指令是否结束,以便执行后续指令。
@语句 以 @ 开头,是 wsmud_raid 提供的便捷语句。
它包含了判断指令是否结束的逻辑,直至指令执行结束才会执行它后续的语句。
目前,提供以下 @语句,后续会根据需求添加 (如有需求可在下方跟帖):
1). @kill 敌人名字1,敌人名字2,...
直至杀死指定名字、数量的敌人,该语句执行完毕。
@kill 管家,家丁,家丁
复制上方代码默认使用模糊查找,若在敌人名字后面添加
%
表示进行精确查找,敌人名字必须完全吻合指定的名字。@kill 日月神教前辈长老 曲洋%,曲非烟
复制上方代码亦可找到 ”日月神教前辈长老 曲洋” 和 “古灵精怪 曲非烟“ 并进行击杀。
2). @until 条件
等待,直到条件满足,该语句执行完毕。
@until (:room)==扬州城-广场 go north
复制上方代码3). @cd
等待所有技能冷却结束,该语句执行完毕。
此外,可以等待指定技能的 cd,或等待除了指定技能外其他技能的 cd。
使用技能的 sid 指定技能,多个技能用
,
连接。-
等待指定技能的 cd
// 等待 缠字诀 和 三阴毒爪 的 cd @cd sword.chan,unarmed.san
复制上方代码 -
等待除了指定技能外其他技能的 cd
// 等待除了 真武除邪 和 一气化三清 以外所有技能的 cd @cd ^force.chu,force.san
复制上方代码
4). @liaoshang
就地疗伤,直至气血回满,该语句执行完毕。
5). @dazuo
就地打坐,直至内力回满,该语句执行完毕。
10). @renew
前往武庙回复自身气血和内力,直至完成,该语句执行完毕。
7). @eq 装备id1,装备id2
穿戴指定装备,直至成功,该语句执行完毕。
备注:因为装备穿戴存在冷却 cd,所以直接调用
eq 装备id
未必能够穿戴成功。8). @tip 关键文字
直至出现包含 关键文字 的系统提示,该语句执行完毕。
该语句中,可以截取部分信息、定义变量并用截取部分初始化,例如:
@tip 你数了下大概有($number)朵花
复制上方代码备注:@tip 语句的上一条(非守护)语句 刚刚被执行的时刻起产生的系统提示,才在被搜索的范围内。
另外,@tip 后面允许多个条件,请用
|
分隔,例如:@tip 你不会撬锁|钥匙($open)了秘门
9). @tidyBag
整理背包,直至完成,该语句执行完毕。
10). @cleanBag
使用游戏自带的清理包裹功能,直至完成,该语句执行完毕。
11). @shimen
当 wsmud_pluginss 中打开师门自动放弃时,可使用该语句做师门任务,直至完成,该语句执行完毕。
12). @dialog
执行打开列表面板的系统命令后,需要调用此命令以等待列表面板的确实打开,之后再使用 id 占位符。
// 打开当铺老板售卖列表 select {r唐楠};list {r唐楠} @dialog buy 1 {d引气丹g} from {r唐楠}
复制上方代码13). @print
打印后面的内容,例如:
@print Hello World!
14). @call
调用其他的流程,格式为:
@call 流程名称 参数0,参数1,...
例如:
@call 武道塔 74,85
在名为“武道塔”的流程中,可以用
(arg0)
、(arg1)
来使用@call
传来的参数,如上调用则:(arg0) 的值为 74,(arg1) 的值为 85。使用
@call
会自动忽略被调用流程的 #语句。如何兼容两种模式可以参考本版块的已发布代码。目前
@call
不支持嵌套调用,即被调用的流程中不能含有@call
语句,后续视需求决定是否支持。2. 守护语句
守护语句当前不会立即执行;在其之后的每一条语句 (除了守护语句) 执行完毕,都会执行该条守护语句。
使用
<---
和--->
包裹语句,即声明语句为守护语句。例如,下面的语句会使得之后的每条语句执行后都会检查血量,若少于 80% 则进行疗伤。
<--- [if] (:hpPer)<0.8 @liaoshang --->
复制上方代码3. #语句
使用#语句可以弹出参数配置界面,用户可以输入流程运行需要的参数。例如:
#select ($cleanWay) = 背包清理方案,不清理|售卖|存仓及售卖,存仓及售卖 #input ($repeat) = 重复次数,1 #config
复制上方代码将会弹出如下界面:
1). #input
格式为 #input ($<变量名>)=<说明文字>,<默认值>
2). #select
格式为 #select ($<变量名>)=<说明文字>,<选项1|选项2|选项3|...>,<默认值>
3). #config
弹出参数配置界面。
4. 辅助语句
1) <-stopSSAuto 和 stopSSAuto->
停止 ss 的自动 Boss 和 婚宴;恢复 ss 的自动 Boss 和 婚宴。
2) <-recordGains 和 recordGains->
开始、结束记录战利品获得。
<-recordGains @kill 黄药师 $getall recordGains->
复制上方代码4. 注释
以
//
开头的行即为注释:// 我是一个注释,不会被执行
复制上方代码
-
-
子流程
从版本 2.2.0 开始支持子流程了!
举例如下:
<=== ($weapon) = (:eq0) [while] true [if] (:eq0) != (weapon) @eq (weapon) @wait 500 ===>
复制上方代码
使用说明:
-
子流程代码需要使用
===>
和===>
包裹来声明。 -
在流程的任意处均可声明子流程:
[if] {r大坏蛋}? != null <=== ($weapon) = (:eq0) [while] true [if] (:eq0) != (weapon) @eq (weapon) @wait 500 ===> @kill 大坏蛋
复制上方代码 -
子流程会在声明处自动开始运行。
-
主流程暂停、继续运行、停止时,所有子流程会执行同样操作。
-
暂时无法单独停止某个子流程的运行,后续如有需求可以添加此功能。
-
子流程内的(非全局)变量是独立于主流程的,即子流程无法直接使用主流程内的(非全局)变量。
如果希望在子流程中使用主流程中的某个值,或反过来希望在主流程中使用子流程中的某个值,请使用全局变量传递值。
-
暂时不支持在被调用流程中使用子流程,后续版本会完善。
注意!如果你的子流程中包含发送系统指令,那么请注意控制发送系统指令的总体频度,否则可能会引发系统制裁导致流程异常。
-