SD插件SDWhile循环判断指令详解 - 批量发奖脚本配置
摘要:SD插件循环判断指令用SDWhile命令实现,本文讲解命令格式说明、参数讲解、实战案例与常见坑点。命令带循环变量、检测符号、判断参数、自增自减值四个参数,必须与sdENDWHILE配对并放在#ACT下使用,循环体里要让变量逼近退出条件避免死循环,支持多层嵌套,适合批量回收与按数量重复发奖。…
很多人在问脚本里怎么让一段命令重复执行指定次数,比如按数量循环发奖励、批量处理包裹物品。SD插件的循环判断指令SDWhile就是解决这个的,它让你给定一个变量和判断条件,条件成立就反复跑循环体,直到条件不满足才退出。写回收、批量发物品这类脚本时,用它比复制粘贴十遍命令清爽得多。
我第一次用的时候忘了在循环体里给变量减一,结果M2直接卡死,重启才恢复。这篇把循环判断指令的四个参数、嵌套写法和防死循环要点讲清楚,你照着写就不会把M2跑死。

命令格式说明
SDWhile要和循环尾命令sdENDWHILE配对使用,循环体夹在中间。它必须写在#ACT下,循环开始和循环尾都支持嵌套。基本写法为:
[@测试]
#Act
Mov N0 5
SDWhile N0 > 0
DEC N0 1
give 金币 5000
sendmsg 7 回收成功,金币+5000.
SDendWhile
sendmsg 7 执行完成!
SDWhile后面接变量、检测符号和判断条件,条件成立就进入循环体。循环尾sdENDWHILE负责标记这段循环结束。上面例子里N0从5开始,每圈减1,减到0就退出。
参数讲解
| 参数 | 说明 | 实操用法 |
|---|---|---|
| 参数1变量 | 被判断的循环变量 | 用N0这类数值变量 |
| 参数2检测符号 | 等于、不等于、大于、大于等于、小于、小于等于 | 按退出条件选符号 |
| 参数3判断参数 | 跟变量比较的值,可以是变量 | 如大于0就填0 |
| 参数4自增自减 | 运行一次后变量自动增减,默认0 | 填-1每圈减1 |
参数4是自增或自减值,填1表示跑一圈参数1自动加1,填-2表示自动减2,默认或不写等于0,支持任意整数,数值范围以本地版本为准。它只对变量起作用。记住:循环体里必须有让变量逼近不满足条件的动作,否则会一直循环卡死M2。
实战案例
多重循环做嵌套时,三层SDWhile套在一起,每层用独立变量计数:
#act
mov N0 3
mov n4 0
sdwhile N0 > 1 -1
mov N1 4
sdwhile N1 > 1 -1
mov N2 5
sdwhile N2 > 1 -1
inc n4 1
sendmsg 7 循环=<$STR(N0)>/<$STR(N1)>/<$STR(N2)>/<$STR(N4)>
SDendwhile
SDendwhile
SDendwhile
三层各自用参数4填-1做自减,n4在最内层累加,记录一共跑了多少圈。嵌套时每层SDWhile都要对应一个sdENDWHILE,少写一个配对就会报错。这种循环脚本适合批量枚举、按数量重复发奖的场景。
常见坑点
最大的坑是死循环:循环体里没有减一或延时,条件永远成立,M2就被卡死。例子里特意写了DEC N0 1,就是为了让每圈把N0往0靠近。第二个坑是嵌套时循环尾sdENDWHILE数量对不上,开始几个就得结束几个。第三个坑是把SDWhile写在#IF段,它要求放在#ACT下使用。循环条件设错的后果比普通命令严重,改完先小范围测。
FAQ问答
1. 问:怎么用脚本解决挂机发呆罚站的问题?
答:用机器人脚本定时检测人物坐标有没有变化,长时间不动就判定为发呆,先停止挂机再重新激活挂机,让人物动起来。这里本质是靠定时判断加条件触发,和循环判断指令的思路一致,都是先判断条件再执行动作。(来源:MirCoding,2026-09检索,已去隐私)
2. 问:服务端一直提示脚本死循环是什么原因?
答:M2报脚本死循环常见于GOTO跳转,跳转到的目标段里又跳回自身,形成无限自跳转;把相关段脚本贴出来逐段排查多余跳转。用SDWhile做循环时也一样,只要循环体里变量不往退出条件走,就会被判定为死循环。(来源:百度知道,2017-11检索,已去隐私)
3. 问:脚本陷入死循环了应该怎么处理?
答:先检查循环相关命令段下大括号和循环尾是否成对,再确认跳转或循环引用的段名是否存在;循环脚本一定要带条件退出和自减动作,不能无条件自跳转。卡死时重启M2后,第一时间把循环体里加一句让变量逼近条件的命令。(来源:百度知道,2010-07检索,已去隐私)
4. 问:循环判断指令一般用来做什么?
答:按数量重复执行命令最常用,比如回收N件装备就发N次金币奖励、批量给包裹物品做处理、多层枚举组合。凡是要把一段逻辑重复固定次数,都适合写成循环脚本而不是复制命令。
5. 问:SDWhile的参数4自增自减为什么默认是0?
答:默认0表示跑完一圈变量不变,这时必须在循环体里自己用DEC或INC改变量,否则条件永远成立。填-1让它每圈自动减一,就可以把手动减一的动作省掉,写法更紧凑。
6. 问:循环判断指令和跳转执行脚本命令有什么区别?
答:SDWhile是条件循环,靠变量和符号判断每圈要不要继续,天然带退出条件;跳转执行脚本是直接指定跑几次,按次数控制。一个按条件退,一个按次数跑,批量回收这种要边走边判断数量的更适合用SDWhile。
收尾
循环判断指令用SDWhile命令靠变量加检测符号做循环条件判断,决定循环跑几圈,配合sdENDWHILE配对和循环体里的自减动作,就能安全地批量执行命令;嵌套时记得每层都要有循环尾,别让变量一直满足条件把M2卡死。
SDWhile循环的嵌套与自增自减在本地环境验证过,循环条件写错会卡死M2,示例仅供学习参考,其他引擎无同名循环命令。
内容来源可溯:SD插件帮助文档(循环判断指令)。
扫描二维码推送至手机访问。
本文章M2GM发布,如需转载请注明出处。如有侵权请联系站长删除。
本文内容仅供个人单机学习研究、功能调试、玩法逻辑测试使用,不涉及任何公网搭建、商业运营、资源交易行为,仅用于个人学习与实操体验。













