想学传奇服务端脚本,打开版本文件一看满篇的#IF、#ACT、give、take,不知道哪句管什么事。这事说白了就是没把命令分门别类理清楚。传奇脚本看着乱,其实翻来覆去就那么几类:流程控制的、检测判断的、执行功能的、操作变量的。今天按引擎通用标准,把服务端脚本里最常见的命令全拆开讲明白。
**一、脚本基础结构与流程控制命令**
任何脚本文件打开,最先看到的就是方括号和#号开头的玩意。这些是脚本的骨架,决定了对话怎么显示、逻辑往哪跳。
|命令|功能说明|示例|
|------|----------|------|
|[@段名]|定义一个脚本段,段名用英文或数字表示|[@main]|
|goto@段名|跳转到指定段执行|goto@buy|
|#say|后面跟要显示的文字内容|#say你好啊冒险家|
|#act|后面跟要执行的命令|#actgive金条1|
|#if|条件判断的开始|#ifchecklevel50|
|#elseact|条件不成立时执行|#elseactgoto@main|
|#elsesay|条件不成立时显示内容|#elsesay你等级不够|
|break|中断当前命令执行|break|
|close|关闭当前对话窗口|close|
|#call|调用QuestDiary文件夹下的子程序|#call[\功能脚本\测试.txt]@段名|
goto命令最常用,点某个选项就跳去执行对应的功能段。if和act配合是实现脚本逻辑的核心,if后面写条件,成立就走act,不成立走elseact。
**二、物品与金币操作命令**
NPC最基本的功能就是给东西、收东西,这些命令必须烂熟于心。
|命令|功能说明|示例|
|------|----------|------|
|give物品名数量|给玩家指定物品|give裁决之杖1|
|take物品名数量|拿走玩家身上物品|take金条5|
|take物品名数量是否检测装备改名|0或空:不检测,1:检测|take金条51|
|takeex物品名1\|物品名2\|物品名3D0|批量删除物品,回收总数量保存变量|takeex金条\|银元\|铜币D0|
|givegold数量|给金币|givegold100000|
|takegold数量|扣金币|takegold5000|
|takew序列号|将背包里指定序列号的物品删除|takew123456|
|takeb装备位置|脱下指定位置装备放进背包|takeb$weapon|
|takebALL|脱下所有装备|takebALL|
|takecheckitem|收取前面用checkitem检测过的物品|takecheckitem|
注意take和takew的区别,take只能回收背包里的,takew可以直接按序列号删物品。takeb用于脱装备,写ALL就是全身脱光。
**三、地图移动相关命令**
传送、刷怪、清怪都靠这批命令。
|命令|功能说明|示例|
|------|----------|------|
|map地图名|移动到指定地图随机坐标|map3|
|mapmove地图名XY|移动到指定地图的精确坐标|mapmove0330330|
|mapmove地图名XY范围|在指定坐标范围内随机移动|mapmove015050510|
|TimeRecall分钟数|设置进入地图后的停留时间,超时传回|TimeRecall30|
|BreakTimeRecall|中断时间限制|BreakTimeRecall|
|monclear地图名|清空指定地图的所有怪物|monclear3|
|Param1地图名|刷怪命令第一参数:地图|Param13|
|Param2横坐标|刷怪命令第二参数:横坐标|Param2150|
|Param3纵坐标|刷怪命令第三参数:纵坐标|Param3150|
|MonGen怪物名数量时间|配合上面三个参数刷怪|MonGen白野猪160|
|ExchangeMap地图名|和指定地图里的人交换位置|ExchangeMap0150|
mapmove后面不写坐标就是随机传送,写了坐标就是定点,再加个范围就是在那个点周围随机飘。TimeRecall常用于限制活动地图停留时间,时间到了自动传回。
**四、变量定义与运算命令**
脚本里要计数、要随机、要记录状态,离不开变量。不同引擎变量类型略有差异,下面列的是通用规则。
P0-P9:临时变量,只在当前NPC对话有效,关了对话框就清零。
D0-D9:私人变量,下线清零,在线时全局NPC通用。
N0-N999:整数变量,用法和P、D类似。
S0-S999:字符串变量,存文字用的。
G0-G999:全局变量,整个服务器通用,所有玩家共享。
A0-A999:全局字符串变量。
U0-U49:私人变量,数字型,可保存到人物数据库。
T0-T49:私人变量,字符型,可保存到人物数据库。
|命令|功能说明|示例|
|------|----------|------|
|mov变量数值|给变量赋值|movN1100|
|inc变量数值|变量加指定数值|incN150|
|dec变量数值|变量减指定数值|decN130|
|mul变量数值|变量乘指定数值|mulN12|
|mul变量数值1数值2|变量乘两数乘积|mulN11002|
|div变量数值|变量整除指定数值|divN15|
|div变量数值1数值2|变量乘两数商|divN11002|
|movr变量数值|给变量赋0到数值之间的随机数|movrN110|
|movr变量最小值最大值|给变量赋指定范围随机数|movrP010100|
|random数值|随机概率判断,数值几就是几分之一几率|random3|
|<$STR(变量)>|把变量的值显示出来|#say你的积分是<$STR(N1)>|
|small变量数值|检测变量是否小于指定数值|smallN1100|
|large变量数值|检测变量是否大于指定数值|largeN1100|
|equal变量数值|检测变量是否等于指定数值|equalN1100|
sum命令用法有点绕,先要把结果变量清0,然后每写一行sum就加一个数进去。
```
MOVN00;先把N0清0
sumN1N2;N0=N1+N2
sumN3;N0=N0+N3最终N0=N1+N2+N3
```
**五、条件检测命令大全**
#if后面跟的检测命令,种类最多,挑常用的列出来。
**等级职业类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKLEVELEX(><=)等级|检测人物等级|CHECKLEVELEX>50|
|CHECKJOB职业|检测职业,职业用Warr/Wizard/Taos|CHECKJOBWarr|
|CHECKEXP(><=)经验值|检测当前经验值|CHECKEXP>1000000|
|CHECKGENDER性别|检测性别,Man男Woman女|CHECKGENDERMan|
|CHECKCREDITPOINT(><=)数值|检测声望值|CHECKCREDITPOINT>200|
**背包装备类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKITEM物品名数量|检测背包里是否有指定数量物品|CHECKITEM疗伤药5|
|CHECKITEMW物品名|检测身上是否佩戴指定物品|CHECKITEMW传送戒指|
|CHECKGOLD数量|检测金币是否大于等于指定数量|CHECKGOLD50000|
|CHECKGAMEGOLD(><=)数量|检测元宝数量|CHECKGAMEGOLD>1000|
|CHECKBAGGAGE|检测背包是否已满|CHECKBAGGAGE|
|CHECKBAGSIZE空格数|检测背包空格数量是否达标|CHECKBAGSIZE5|
|CHECKUSEITEM位置|检测指定位置是否戴了东西|CHECKUSEITEM1|
|CHECKITEMTYPE物品位置物品类型|检测指定位置物品类型|CHECKITEMTYPE12|
|CHECKDURAEVA物品名数值|检测有品质的物品的品质|CHECKDURAEVA金矿10|
**人物状态类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKPKPOINT(><=)数值|检测PK值|CHECKPKPOINT>100|
|CHECKLUCKYPOINT(><=)数值|检测幸运值|CHECKLUCKYPOINT>5|
|CHECKHP(><=)下限(><=)上限|检测HP值范围|CHECKHP<300>100|
|CHECKMP(><=)下限(><=)上限|检测MP值范围|CHECKMP<200>50|
|CHECKSLAVECOUNT(><=)数量|检测宝宝数量|CHECKSLAVECOUNT>3|
|CHECKSLAVELEVEL(><=)等级|检测宝宝等级|CHECKSLAVELEVEL>5|
|CHECKSKILL技能名(><=)等级|检测技能修炼等级|CHECKSKILL魔法盾=3|
**地图人数类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKHUM地图名(><=)数量|检测指定地图的人数|CHECKHUM3<10|
|CHECKMON地图名(><=)数量|检测指定地图的怪物数量|CHECKMON3>50|
|CHECKMONMAP地图名数量|检测指定地图的怪物数|CHECKMONMAP3100|
|CHECKRANGEMONCOUNT地图号XY范围(><=)数量|检测坐标范围内怪物数|CHECKRANGEMONCOUNT315015010>5|
**列表检测类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKNAMELIST文件名.txt|检测名字是否在名单里|CHECKNAMELIST封号名单.txt|
|CHECKIPLIST文件名.txt|检测IP是否在名单里|CHECKIPLIST禁止IP.txt|
|CHECKACCOUNTLIST文件名.txt|检测账号是否在名单里|CHECKACCOUNTLIST会员账号.txt|
|CHECKGUILDLIST文件名.txt|检测行会是否在名单里|CHECKGUILDLIST攻城行会.txt|
|CHECKACCOUNTIPLIST文件名.txt|检测账号和IP是否匹配列表|CHECKACCOUNTIPLIST白名单.txt|
**其他常用检测:**
|命令|功能说明|示例|
|------|----------|------|
|ISADMIN|检测是否为管理员|ISADMIN|
|HAVEGUILD|检测是否有行会|HAVEGUILD|
|ISCASTLEMASTER|检测是否为沙城主|ISCASTLEMASTER|
|ISGUILDMASTER|检测是否为行会老大|ISGUILDMASTER|
|ISNEWHUMAN|检测是否为新人(首次登录)|ISNEWHUMAN|
|ONLINELONGMIN(><=)分钟|检测在线时长|ONLINELONGMIN>60|
|ISLOCKPASSWORD|检测仓库是否解锁|ISLOCKPASSWORD|
**六、功能执行命令**
条件成立后,在#act或#elseact后面执行的叫功能命令。
**人物属性调整类:**
|命令|功能说明|示例|
|------|----------|------|
|CHANGEEXP(+-=)数值|调整经验值|CHANGEEXP+50000|
|CHANGELEVEL(+-=)等级|调整等级|CHANGELEVEL+1|
|CHANGEPKPOINT(+-=)点数|调整PK值|CHANGEPKPOINT-50|
|GAMEGOLD(+-=)数量|调整元宝|GAMEGOLD+1000|
|CREDITPOINT(+-=)数量|调整声望|CREDITPOINT+10|
|CHANGENAMECOLOR数值|改名字颜色|CHANGENAMECOLOR253|
|HAIRSTYLE数值|改发型|HAIRSTYLE2|
|HAIRCOLOR红值绿值蓝值|改头发颜色|HAIRCOLOR25500|
|HUMANHP+数值|加血量|HUMANHP+500|
|HUMANMP+数值|加魔法值|HUMANMP+300|
**技能类命令:**
|命令|功能说明|示例|
|------|----------|------|
|ADDSKILL技能名等级|学习技能|ADDSKILL召唤神兽3|
|DELSKILL技能名|删除技能|DELSKILL烈火剑法|
|SKILLLEVEL技能名(=+-)等级|调整技能等级|SKILLLEVEL冰咆哮+1|
|DELNOJOBSKILL|删除所有非本职业技能|DELNOJOBSKILL|
**宝宝类命令:**
|命令|功能说明|示例|
|------|----------|------|
|RECALLMOB怪物名宝宝等级叛变分钟变色固定颜色|召唤宝宝|RECALLMOB神兽7600|
|KILLSLAVE|杀死所有宝宝|KILLSLAVE|
|CHANGESLAVELEVEL(+-=)等级|调整宝宝等级|CHANGESLAVELEVEL+1|
**称号与行会类:**
|命令|功能说明|示例|
|------|----------|------|
|SETRANKLEVELNAME%s称号|设置人物封号|SETRANKLEVELNAME%s天下第一|
|ADDGUILDLIST文件名.txt|将行会加入列表|ADDGUILDLIST攻城行会.txt|
|DELGUILDLIST文件名.txt|将行会移出列表|DELGUILDLIST攻城行会.txt|
|ADDNAMELIST文件名.txt|将名字加入列表|ADDNAMELIST会员名单.txt|
|DELNAMELIST文件名.txt|将名字移出列表|DELNAMELIST会员名单.txt|
**消息与服务器类:**
|命令|功能说明|示例|
|------|----------|------|
|SENDMSG信息类型消息内容|发送公告,类型0全服1自己2身边3全服弹窗|SENDMSG0恭喜%s获得屠龙|
|CLEARMAPMON地图名|清除地图内所有怪物|CLEARMAPMON3|
|KICK|将当前玩家踢下线|KICK|
|KILL数值|杀死当前玩家|KILL1|
|REPAIRALL|修理全身装备|REPAIRALL|
|MESSAGEBOX消息内容|弹出对话框提示|MESSAGEBOX你的元宝不足|
**七、逻辑变量与开关命令**
很多版本用[n]这种逻辑变量记录任务状态。
|命令|功能说明|示例|
|------|----------|------|
|SET[n]1|设置逻辑变量为真|SET[100]1|
|SET[n]0|设置逻辑变量为假|SET[100]0|
|CHECK[n]1|检测逻辑变量是否为真|CHECK[100]1|
|RESET[起始]个数|将从起始开始的连续变量清零|RESET[100]7|
reset命令等价于写七行SET[100]0到SET[106]0。
**八、系统常量与变量显示**
写脚本时经常需要显示一些动态内容,比如玩家名字、当前行会,这些用系统常量直接调。
|常量|含义|
|------|------|
|<$USERNAME>|当前玩家名字|
|<$LEVEL>|当前玩家等级|
|<$JOB>|职业|
|<$GENDER>|性别|
|<$PKPOINT>|PK值|
|<$HP>|当前血量|
|<$MP>|当前魔法值|
|<$MAXHP>|最大血量|
|<$MAXMP>|最大魔法值|
|<$GOLDCOUNT>|背包金币数|
|<$GAMEGOLD>|元宝数|
|<$CREDITPOINT>|声望值|
|<$USERWEAPON>|手里拿的武器名称|
|<$OWNERGUILD>|沙巴克行会名称|
|<$LORD>|沙城主名字|
|<$CASTLEGOLD>|沙巴克总金币|
|<$DATETIME>|当前服务器时间|
|<$H.变量>|英雄的变量|<$H.HP>|
|<$STR(变量)>|将变量转换为字符型|<$STR(N1)>|
这些常量用在#say后面,可以直接把数值显示出来。比如写#say尊敬的<$USERNAME>,你的等级是<$LEVEL>。
**九、NPC对话功能开关**
NPC脚本开头经常会看到%100、+40这种数字,这些是定义NPC功能类型的。
|代码|功能|
|------|------|
|%100|标准买卖价格(不加倍)|
|%200|双倍价格|
|+0|买药水类|
|+1|卖肉|
|+3|买书|
|+4|卖书|
|+5|修武器/买武器|
|+6|卖武器|
|+10|买衣服|
|+11|修衣服|
|+15|头盔类|
|+19+20+21|项链类|
|+22|买戒指|
|+23|卖戒指|
|+24|买手镯|
|+26|修手镯|
|+40|买肉|
|+42|卖药水|
|+43|武器相关|
这些代码写在脚本最开头,决定点开NPC后默认弹出什么功能界面。
**十、英雄相关命令**
带英雄的版本还有一套英雄专属命令。
|命令|功能说明|示例|
|------|----------|------|
|H.命令|英雄执行命令|H.CheckItemW火龙之心1|
|H.GIVE物品名数量|给英雄物品|H.GIVE护身符1|
|H.TakeOn物品名位置|英雄穿戴装备|H.TakeOn火龙之心9|
|H.RepairAll|修理英雄全身装备|H.RepairAll|
|CHECKHEROONLINE|检测英雄是否在线|CHECKHEROONLINE|
**十一、组队相关命令**
|命令|功能说明|示例|
|------|----------|------|
|CHECKGROUPCOUNT(><=)数量变量|检测组队人数,结果存变量|CHECKGROUPCOUNT>0M2|
|GROUPMAPMOVE地图号XY等级@触发|全队传送|GROUPMAPMOVE315015011@ENTER|
|ISGROUPMASTER|检测是否为队长|ISGROUPMASTER|
**十二、脚本符号使用规则**
写脚本还得搞懂几个符号的用法:
[]方括号括起来的表示段标签,比如[@main]。
<>尖括号括起来的表示可点击的选项,里面用/分隔显示文字和跳转段。比如<购买/@buy>,玩家点"购买"就跳去[@buy]段。
\反斜杠表示换行。
;分号放行首表示这一行是注释,不执行。
空格命令和参数之间通常用空格隔开。
/斜杠在选项里分隔显示文本和跳转目标。
写一个最简单的NPC对话例子:
```
[@main]
#say
欢迎光临我的小店。\
你可以进行以下操作:\
<购买药品/@buy>\
<修理装备/@repair>\
<没什么事/@exit>
[@buy]
#say
你需要买什么?\
<强效金疮药/@buy_hp>\
<强效魔法药/@buy_mp>
[@buy_hp]
#act
give强效金疮药5
#say
给你5瓶药。
```
这个例子里用到了段跳转、say显示、act执行命令,是最基础的脚本框架。想学传奇脚本,先把上面这些命令记熟,找个版本对着看,很快就能上手。
**一、脚本基础结构与流程控制命令**
任何脚本文件打开,最先看到的就是方括号和#号开头的玩意。这些是脚本的骨架,决定了对话怎么显示、逻辑往哪跳。
|命令|功能说明|示例|
|------|----------|------|
|[@段名]|定义一个脚本段,段名用英文或数字表示|[@main]|
|goto@段名|跳转到指定段执行|goto@buy|
|#say|后面跟要显示的文字内容|#say你好啊冒险家|
|#act|后面跟要执行的命令|#actgive金条1|
|#if|条件判断的开始|#ifchecklevel50|
|#elseact|条件不成立时执行|#elseactgoto@main|
|#elsesay|条件不成立时显示内容|#elsesay你等级不够|
|break|中断当前命令执行|break|
|close|关闭当前对话窗口|close|
|#call|调用QuestDiary文件夹下的子程序|#call[\功能脚本\测试.txt]@段名|
goto命令最常用,点某个选项就跳去执行对应的功能段。if和act配合是实现脚本逻辑的核心,if后面写条件,成立就走act,不成立走elseact。
**二、物品与金币操作命令**
NPC最基本的功能就是给东西、收东西,这些命令必须烂熟于心。
|命令|功能说明|示例|
|------|----------|------|
|give物品名数量|给玩家指定物品|give裁决之杖1|
|take物品名数量|拿走玩家身上物品|take金条5|
|take物品名数量是否检测装备改名|0或空:不检测,1:检测|take金条51|
|takeex物品名1\|物品名2\|物品名3D0|批量删除物品,回收总数量保存变量|takeex金条\|银元\|铜币D0|
|givegold数量|给金币|givegold100000|
|takegold数量|扣金币|takegold5000|
|takew序列号|将背包里指定序列号的物品删除|takew123456|
|takeb装备位置|脱下指定位置装备放进背包|takeb$weapon|
|takebALL|脱下所有装备|takebALL|
|takecheckitem|收取前面用checkitem检测过的物品|takecheckitem|
注意take和takew的区别,take只能回收背包里的,takew可以直接按序列号删物品。takeb用于脱装备,写ALL就是全身脱光。
**三、地图移动相关命令**
传送、刷怪、清怪都靠这批命令。
|命令|功能说明|示例|
|------|----------|------|
|map地图名|移动到指定地图随机坐标|map3|
|mapmove地图名XY|移动到指定地图的精确坐标|mapmove0330330|
|mapmove地图名XY范围|在指定坐标范围内随机移动|mapmove015050510|
|TimeRecall分钟数|设置进入地图后的停留时间,超时传回|TimeRecall30|
|BreakTimeRecall|中断时间限制|BreakTimeRecall|
|monclear地图名|清空指定地图的所有怪物|monclear3|
|Param1地图名|刷怪命令第一参数:地图|Param13|
|Param2横坐标|刷怪命令第二参数:横坐标|Param2150|
|Param3纵坐标|刷怪命令第三参数:纵坐标|Param3150|
|MonGen怪物名数量时间|配合上面三个参数刷怪|MonGen白野猪160|
|ExchangeMap地图名|和指定地图里的人交换位置|ExchangeMap0150|
mapmove后面不写坐标就是随机传送,写了坐标就是定点,再加个范围就是在那个点周围随机飘。TimeRecall常用于限制活动地图停留时间,时间到了自动传回。
**四、变量定义与运算命令**
脚本里要计数、要随机、要记录状态,离不开变量。不同引擎变量类型略有差异,下面列的是通用规则。
P0-P9:临时变量,只在当前NPC对话有效,关了对话框就清零。
D0-D9:私人变量,下线清零,在线时全局NPC通用。
N0-N999:整数变量,用法和P、D类似。
S0-S999:字符串变量,存文字用的。
G0-G999:全局变量,整个服务器通用,所有玩家共享。
A0-A999:全局字符串变量。
U0-U49:私人变量,数字型,可保存到人物数据库。
T0-T49:私人变量,字符型,可保存到人物数据库。
|命令|功能说明|示例|
|------|----------|------|
|mov变量数值|给变量赋值|movN1100|
|inc变量数值|变量加指定数值|incN150|
|dec变量数值|变量减指定数值|decN130|
|mul变量数值|变量乘指定数值|mulN12|
|mul变量数值1数值2|变量乘两数乘积|mulN11002|
|div变量数值|变量整除指定数值|divN15|
|div变量数值1数值2|变量乘两数商|divN11002|
|movr变量数值|给变量赋0到数值之间的随机数|movrN110|
|movr变量最小值最大值|给变量赋指定范围随机数|movrP010100|
|random数值|随机概率判断,数值几就是几分之一几率|random3|
|<$STR(变量)>|把变量的值显示出来|#say你的积分是<$STR(N1)>|
|small变量数值|检测变量是否小于指定数值|smallN1100|
|large变量数值|检测变量是否大于指定数值|largeN1100|
|equal变量数值|检测变量是否等于指定数值|equalN1100|
sum命令用法有点绕,先要把结果变量清0,然后每写一行sum就加一个数进去。
```
MOVN00;先把N0清0
sumN1N2;N0=N1+N2
sumN3;N0=N0+N3最终N0=N1+N2+N3
```
**五、条件检测命令大全**
#if后面跟的检测命令,种类最多,挑常用的列出来。
**等级职业类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKLEVELEX(><=)等级|检测人物等级|CHECKLEVELEX>50|
|CHECKJOB职业|检测职业,职业用Warr/Wizard/Taos|CHECKJOBWarr|
|CHECKEXP(><=)经验值|检测当前经验值|CHECKEXP>1000000|
|CHECKGENDER性别|检测性别,Man男Woman女|CHECKGENDERMan|
|CHECKCREDITPOINT(><=)数值|检测声望值|CHECKCREDITPOINT>200|
**背包装备类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKITEM物品名数量|检测背包里是否有指定数量物品|CHECKITEM疗伤药5|
|CHECKITEMW物品名|检测身上是否佩戴指定物品|CHECKITEMW传送戒指|
|CHECKGOLD数量|检测金币是否大于等于指定数量|CHECKGOLD50000|
|CHECKGAMEGOLD(><=)数量|检测元宝数量|CHECKGAMEGOLD>1000|
|CHECKBAGGAGE|检测背包是否已满|CHECKBAGGAGE|
|CHECKBAGSIZE空格数|检测背包空格数量是否达标|CHECKBAGSIZE5|
|CHECKUSEITEM位置|检测指定位置是否戴了东西|CHECKUSEITEM1|
|CHECKITEMTYPE物品位置物品类型|检测指定位置物品类型|CHECKITEMTYPE12|
|CHECKDURAEVA物品名数值|检测有品质的物品的品质|CHECKDURAEVA金矿10|
**人物状态类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKPKPOINT(><=)数值|检测PK值|CHECKPKPOINT>100|
|CHECKLUCKYPOINT(><=)数值|检测幸运值|CHECKLUCKYPOINT>5|
|CHECKHP(><=)下限(><=)上限|检测HP值范围|CHECKHP<300>100|
|CHECKMP(><=)下限(><=)上限|检测MP值范围|CHECKMP<200>50|
|CHECKSLAVECOUNT(><=)数量|检测宝宝数量|CHECKSLAVECOUNT>3|
|CHECKSLAVELEVEL(><=)等级|检测宝宝等级|CHECKSLAVELEVEL>5|
|CHECKSKILL技能名(><=)等级|检测技能修炼等级|CHECKSKILL魔法盾=3|
**地图人数类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKHUM地图名(><=)数量|检测指定地图的人数|CHECKHUM3<10|
|CHECKMON地图名(><=)数量|检测指定地图的怪物数量|CHECKMON3>50|
|CHECKMONMAP地图名数量|检测指定地图的怪物数|CHECKMONMAP3100|
|CHECKRANGEMONCOUNT地图号XY范围(><=)数量|检测坐标范围内怪物数|CHECKRANGEMONCOUNT315015010>5|
**列表检测类:**
|命令|功能说明|示例|
|------|----------|------|
|CHECKNAMELIST文件名.txt|检测名字是否在名单里|CHECKNAMELIST封号名单.txt|
|CHECKIPLIST文件名.txt|检测IP是否在名单里|CHECKIPLIST禁止IP.txt|
|CHECKACCOUNTLIST文件名.txt|检测账号是否在名单里|CHECKACCOUNTLIST会员账号.txt|
|CHECKGUILDLIST文件名.txt|检测行会是否在名单里|CHECKGUILDLIST攻城行会.txt|
|CHECKACCOUNTIPLIST文件名.txt|检测账号和IP是否匹配列表|CHECKACCOUNTIPLIST白名单.txt|
**其他常用检测:**
|命令|功能说明|示例|
|------|----------|------|
|ISADMIN|检测是否为管理员|ISADMIN|
|HAVEGUILD|检测是否有行会|HAVEGUILD|
|ISCASTLEMASTER|检测是否为沙城主|ISCASTLEMASTER|
|ISGUILDMASTER|检测是否为行会老大|ISGUILDMASTER|
|ISNEWHUMAN|检测是否为新人(首次登录)|ISNEWHUMAN|
|ONLINELONGMIN(><=)分钟|检测在线时长|ONLINELONGMIN>60|
|ISLOCKPASSWORD|检测仓库是否解锁|ISLOCKPASSWORD|
**六、功能执行命令**
条件成立后,在#act或#elseact后面执行的叫功能命令。
**人物属性调整类:**
|命令|功能说明|示例|
|------|----------|------|
|CHANGEEXP(+-=)数值|调整经验值|CHANGEEXP+50000|
|CHANGELEVEL(+-=)等级|调整等级|CHANGELEVEL+1|
|CHANGEPKPOINT(+-=)点数|调整PK值|CHANGEPKPOINT-50|
|GAMEGOLD(+-=)数量|调整元宝|GAMEGOLD+1000|
|CREDITPOINT(+-=)数量|调整声望|CREDITPOINT+10|
|CHANGENAMECOLOR数值|改名字颜色|CHANGENAMECOLOR253|
|HAIRSTYLE数值|改发型|HAIRSTYLE2|
|HAIRCOLOR红值绿值蓝值|改头发颜色|HAIRCOLOR25500|
|HUMANHP+数值|加血量|HUMANHP+500|
|HUMANMP+数值|加魔法值|HUMANMP+300|
**技能类命令:**
|命令|功能说明|示例|
|------|----------|------|
|ADDSKILL技能名等级|学习技能|ADDSKILL召唤神兽3|
|DELSKILL技能名|删除技能|DELSKILL烈火剑法|
|SKILLLEVEL技能名(=+-)等级|调整技能等级|SKILLLEVEL冰咆哮+1|
|DELNOJOBSKILL|删除所有非本职业技能|DELNOJOBSKILL|
**宝宝类命令:**
|命令|功能说明|示例|
|------|----------|------|
|RECALLMOB怪物名宝宝等级叛变分钟变色固定颜色|召唤宝宝|RECALLMOB神兽7600|
|KILLSLAVE|杀死所有宝宝|KILLSLAVE|
|CHANGESLAVELEVEL(+-=)等级|调整宝宝等级|CHANGESLAVELEVEL+1|
**称号与行会类:**
|命令|功能说明|示例|
|------|----------|------|
|SETRANKLEVELNAME%s称号|设置人物封号|SETRANKLEVELNAME%s天下第一|
|ADDGUILDLIST文件名.txt|将行会加入列表|ADDGUILDLIST攻城行会.txt|
|DELGUILDLIST文件名.txt|将行会移出列表|DELGUILDLIST攻城行会.txt|
|ADDNAMELIST文件名.txt|将名字加入列表|ADDNAMELIST会员名单.txt|
|DELNAMELIST文件名.txt|将名字移出列表|DELNAMELIST会员名单.txt|
**消息与服务器类:**
|命令|功能说明|示例|
|------|----------|------|
|SENDMSG信息类型消息内容|发送公告,类型0全服1自己2身边3全服弹窗|SENDMSG0恭喜%s获得屠龙|
|CLEARMAPMON地图名|清除地图内所有怪物|CLEARMAPMON3|
|KICK|将当前玩家踢下线|KICK|
|KILL数值|杀死当前玩家|KILL1|
|REPAIRALL|修理全身装备|REPAIRALL|
|MESSAGEBOX消息内容|弹出对话框提示|MESSAGEBOX你的元宝不足|
**七、逻辑变量与开关命令**
很多版本用[n]这种逻辑变量记录任务状态。
|命令|功能说明|示例|
|------|----------|------|
|SET[n]1|设置逻辑变量为真|SET[100]1|
|SET[n]0|设置逻辑变量为假|SET[100]0|
|CHECK[n]1|检测逻辑变量是否为真|CHECK[100]1|
|RESET[起始]个数|将从起始开始的连续变量清零|RESET[100]7|
reset命令等价于写七行SET[100]0到SET[106]0。
**八、系统常量与变量显示**
写脚本时经常需要显示一些动态内容,比如玩家名字、当前行会,这些用系统常量直接调。
|常量|含义|
|------|------|
|<$USERNAME>|当前玩家名字|
|<$LEVEL>|当前玩家等级|
|<$JOB>|职业|
|<$GENDER>|性别|
|<$PKPOINT>|PK值|
|<$HP>|当前血量|
|<$MP>|当前魔法值|
|<$MAXHP>|最大血量|
|<$MAXMP>|最大魔法值|
|<$GOLDCOUNT>|背包金币数|
|<$GAMEGOLD>|元宝数|
|<$CREDITPOINT>|声望值|
|<$USERWEAPON>|手里拿的武器名称|
|<$OWNERGUILD>|沙巴克行会名称|
|<$LORD>|沙城主名字|
|<$CASTLEGOLD>|沙巴克总金币|
|<$DATETIME>|当前服务器时间|
|<$H.变量>|英雄的变量|<$H.HP>|
|<$STR(变量)>|将变量转换为字符型|<$STR(N1)>|
这些常量用在#say后面,可以直接把数值显示出来。比如写#say尊敬的<$USERNAME>,你的等级是<$LEVEL>。
**九、NPC对话功能开关**
NPC脚本开头经常会看到%100、+40这种数字,这些是定义NPC功能类型的。
|代码|功能|
|------|------|
|%100|标准买卖价格(不加倍)|
|%200|双倍价格|
|+0|买药水类|
|+1|卖肉|
|+3|买书|
|+4|卖书|
|+5|修武器/买武器|
|+6|卖武器|
|+10|买衣服|
|+11|修衣服|
|+15|头盔类|
|+19+20+21|项链类|
|+22|买戒指|
|+23|卖戒指|
|+24|买手镯|
|+26|修手镯|
|+40|买肉|
|+42|卖药水|
|+43|武器相关|
这些代码写在脚本最开头,决定点开NPC后默认弹出什么功能界面。
**十、英雄相关命令**
带英雄的版本还有一套英雄专属命令。
|命令|功能说明|示例|
|------|----------|------|
|H.命令|英雄执行命令|H.CheckItemW火龙之心1|
|H.GIVE物品名数量|给英雄物品|H.GIVE护身符1|
|H.TakeOn物品名位置|英雄穿戴装备|H.TakeOn火龙之心9|
|H.RepairAll|修理英雄全身装备|H.RepairAll|
|CHECKHEROONLINE|检测英雄是否在线|CHECKHEROONLINE|
**十一、组队相关命令**
|命令|功能说明|示例|
|------|----------|------|
|CHECKGROUPCOUNT(><=)数量变量|检测组队人数,结果存变量|CHECKGROUPCOUNT>0M2|
|GROUPMAPMOVE地图号XY等级@触发|全队传送|GROUPMAPMOVE315015011@ENTER|
|ISGROUPMASTER|检测是否为队长|ISGROUPMASTER|
**十二、脚本符号使用规则**
写脚本还得搞懂几个符号的用法:
[]方括号括起来的表示段标签,比如[@main]。
<>尖括号括起来的表示可点击的选项,里面用/分隔显示文字和跳转段。比如<购买/@buy>,玩家点"购买"就跳去[@buy]段。
\反斜杠表示换行。
;分号放行首表示这一行是注释,不执行。
空格命令和参数之间通常用空格隔开。
/斜杠在选项里分隔显示文本和跳转目标。
写一个最简单的NPC对话例子:
```
[@main]
#say
欢迎光临我的小店。\
你可以进行以下操作:\
<购买药品/@buy>\
<修理装备/@repair>\
<没什么事/@exit>
[@buy]
#say
你需要买什么?\
<强效金疮药/@buy_hp>\
<强效魔法药/@buy_mp>
[@buy_hp]
#act
give强效金疮药5
#say
给你5瓶药。
```
这个例子里用到了段跳转、say显示、act执行命令,是最基础的脚本框架。想学传奇脚本,先把上面这些命令记熟,找个版本对着看,很快就能上手。

