传奇技术脚本学习全命令分类详解

来源: 作者: 点击:
想学传奇脚本技术,拿到一个脚本文件看不懂,或者自己想动手改点东西不知道用什么命令。这事说穿了就是两样东西没搞清楚:一是脚本的结构段怎么跳转,二是每个命令具体管什么事。这篇把所有常用脚本命令按功能拆开,从最基础的跳转、给东西,到变量运算、条件判断,再到各种检测命令、功能命令,全给你摆明白。不用管引擎版本是GOM还是GEE还是老Hero,绝大多数命令通用。

**脚本基础结构与流程控制命令**

脚本文件打开,第一眼看到的通常是[@main]这类带方括号的东西,这叫段标签。脚本执行靠的就是在这些段之间跳来跳去。

| 命令 | 功能说明 | 示例 |
|------|----------|------|
| [@段名] | 定义一个脚本段,段名用英文或数字表示 | [@main] |
| goto @段名 | 跳转到指定段执行 | goto @main |
| #say | 后面跟要显示的文字内容 | #say 你好啊冒险家 |
| #act | 后面跟要执行的命令 | #act give 金条 1 |
| #if | 条件判断的开始 | #if checklevel 50 |
| #elseact | 条件不成立时执行 | #elseact goto @main |
| #elsesay | 条件不成立时显示内容 | #elsesay 你等级不够 |
| break | 中断当前命令执行 | break |
| close | 关闭当前对话窗口 | close |
| #call | 调用QuestDiary文件夹下的子程序 | #call [\功能脚本\测试.txt] @段名 |

goto命令最常用,比如点某个选项就跳去执行对应的功能段。if和act配合是实现脚本逻辑的核心,if后面写条件,成立就走act,不成立走elseact。

**物品与金币操作命令**

NPC最基本的功能就是给东西、收东西,这些命令必须烂熟于心。

| 命令 | 功能说明 | 示例 |
|------|----------|------|
| give 物品名 数量 | 给玩家指定物品 | give 裁决之杖 1 |
| take 物品名 数量 | 拿走玩家身上物品 | take 金条 5 |
| give gold 数量 | 给金币 | give gold 100000 |
| take gold 数量 | 扣金币 | take gold 5000 |
| give 物品名 数量 是否强化 | 给带强化属性的物品 | give 屠龙 1 1 |
| takew 物品名 | 直接从身上脱下并回收装备 | takew 圣战戒指 |
| clearitem 物品名 | 清除背包里的指定物品 | clearitem 矿泉水 |
| takecheckitem | 收取前面用checkitem检测过的物品 | takecheckitem |

注意takew和take的区别,take只能回收背包里的,takew可以直接把身上穿着的装备扒下来回收。

**地图移动相关命令**

传送、刷怪、清怪都靠这批命令。

| 命令 | 功能说明 | 示例 |
|------|----------|------|
| map 地图名 | 移动到指定地图随机坐标 | map 3 |
| mapmove 地图名 X Y | 移动到指定地图的精确坐标 | mapmove 0 330 330 |
| mapmove 地图名 X Y 范围 | 在指定坐标范围内随机移动 | mapmove 0150 50 5 |
| TimeRecall 分钟数 | 设置进入地图后的停留时间,超时传回 | TimeRecall 30 |
| BreakTimeRecall | 中断时间限制 | BreakTimeRecall |
| monclear 地图名 | 清空指定地图的所有怪物 | monclear 3 |
| Param1 地图名 | 刷怪命令第一参数:地图 | Param1 3 |
| Param2 X坐标 | 刷怪命令第二参数:横坐标 | Param2 150 |
| Param3 Y坐标 | 刷怪命令第三参数:纵坐标 | Param3 150 |
| MonGen 怪物名 数量 时间 | 配合上面三个参数刷怪 | MonGen 白野猪 1 60 |
| ExchangeMap 地图名 | 和指定地图里的人交换位置 | ExchangeMap 0150 |

mapmove后面不写坐标就是随机传送,写了坐标就是定点,再加个范围就是在那个点周围随机飘。

**变量定义与运算命令**

脚本里要计数、要随机、要记录状态,离不开变量。常用的变量类型分三种:

P0-P9:临时变量,只在当前NPC对话有效,关了对话框就清零。
D0-D9:私人变量,下线清零,在线时全局NPC通用。
N0-N9:整数变量,用法和P、D类似。
S0-S9:字符串变量,存文字用的。
G0-G9:全局变量,整个服务器通用,所有玩家共享。
A-Z:全局字符串变量。

| 命令 | 功能说明 | 示例 |
|------|----------|------|
| mov 变量 数值 | 给变量赋值 | mov N1 100 |
| inc 变量 数值 | 变量加指定数值 | inc N1 50 |
| dec 变量 数值 | 变量减指定数值 | dec N1 30 |
| mul 变量 数值 | 变量乘指定数值 | mul N1 2 |
| div 变量 数值 | 变量整除指定数值 | div N1 5 |
| movr 变量 数值 | 给变量赋0到数值之间的随机数 | movr N1 10 |
| sum 变量A 变量B | 变量求和,需要配合MOV 0使用 | MOV N0 0\nSUM N1 N2\nSUM N3 |
| random 数值 | 随机概率判断,数值几就是几分之一几率 | random 3 |
| <$STR(变量)> | 把变量的值显示出来 | #say 你的积分是<$STR(N1)> |

sum命令用法有点绕,先要把结果变量清0,然后每写一行sum就加一个数进去。

**条件检测命令大全**

#if后面跟的检测命令,种类最多,挑常用的列出来。

等级职业类:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| CHECKLEVELEX (>,<,=) 等级 | 检测人物等级 | CHECKLEVELEX > 50 |
| CHECKJOB 职业 | 检测职业,职业用Warr/Wizard/Taos | CHECKJOB Warr |
| CHECKEXP (>,<,=) 经验值 | 检测当前经验值 | CHECKEXP > 1000000 |
| CHECKGENDER 性别 | 检测性别,Man男 Woman女 | CHECKGENDER Man |

背包装备类:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| CHECKITEM 物品名 数量 | 检测背包里是否有指定数量物品 | CHECKITEM 疗伤药 5 |
| CHECKITEMW 物品名 | 检测身上是否佩戴指定物品 | CHECKITEMW 传送戒指 |
| CHECKGOLD 数量 | 检测金币是否大于等于指定数量 | CHECKGOLD 50000 |
| CHECKBAGGAGE | 检测背包是否已满 | CHECKBAGGAGE |
| CHECKBAGSIZE 空格数 | 检测背包空格数量是否达标 | CHECKBAGSIZE 5 |
| CHECKUSEITEM 位置 | 检测指定位置是否戴了东西 | CHECKUSEITEM 1 |

人物状态类:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| CHECKPKPOINT (>,<,=) 数值 | 检测PK值 | CHECKPKPOINT > 100 |
| CHECKLUCKYPOINT (>,<,=) 数值 | 检测幸运值 | CHECKLUCKYPOINT > 5 |
| CHECKCREDITPOINT (>,<,=) 数值 | 检测声望值 | CHECKCREDITPOINT > 200 |
| CHECKGAMEGOLD (>,<,=) 数量 | 检测元宝数量 | CHECKGAMEGOLD > 1000 |

地图人数类:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| CHECKHUM 地图名 (>,<,=) 数量 | 检测指定地图的人数 | CHECKHUM 3 < 10 |
| CHECKMON 地图名 (>,<,=) 数量 | 检测指定地图的怪物数量 | CHECKMON 3 > 50 |
| CHECKRANGEMONCOUNT 地图 X Y 范围 数量 | 检测坐标范围内怪物数 | CHECKRANGEMONCOUNT 3 150 150 10 > 5 |

列表检测类:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| CHECKNAMELIST 文件名.txt | 检测名字是否在名单里 | CHECKNAMELIST 封号名单.txt |
| CHECKIPLIST 文件名.txt | 检测IP是否在名单里 | CHECKIPLIST 禁止IP.txt |
| CHECKACCOUNTLIST 文件名.txt | 检测账号是否在名单里 | CHECKACCOUNTLIST 会员账号.txt |

其他常用检测:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| ISADMIN | 检测是否为管理员 | ISADMIN |
| HAVEGUILD | 检测是否有行会 | HAVEGUILD |
| ISCASTLEMASTER | 检测是否为沙城主 | ISCASTLEMASTER |
| ISNEWHUMAN | 检测是否为新人(首次登录) | ISNEWHUMAN |
| CHECKSLAVECOUNT (>,<,=) 数量 | 检测宝宝数量 | CHECKSLAVECOUNT > 3 |
| CHECKSKILL 技能名 (>,<,=) 等级 | 检测技能修炼等级 | CHECKSKILL 魔法盾 = 3 |



**功能执行命令**

条件成立后,在#act或#elseact后面执行的叫功能命令。

人物属性调整类:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| CHANGEEXP (+,-,=) 数值 | 调整经验值 | CHANGEEXP + 50000 |
| CHANGELEVEL (+,-,=) 等级 | 调整等级 | CHANGELEVEL + 1 |
| CHANGEPKPOINT (+,-,=) 点数 | 调整PK值 | CHANGEPKPOINT - 50 |
| GAMEGOLD (+,-,=) 数量 | 调整元宝 | GAMEGOLD + 1000 |
| CREDITPOINT (+,-,=) 数量 | 调整声望 | CREDITPOINT + 10 |
| CHANGENAMECOLOR 数值 | 改名字颜色 | CHANGENAMECOLOR 253 |
| HAIRSTYLE 数值 | 改发型 | HAIRSTYLE 2 |

技能类命令:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| ADDSKILL 技能名 等级 | 学习技能 | ADDSKILL 召唤神兽 3 |
| DELSKILL 技能名 | 删除技能 | DELSKILL 烈火剑法 |
| SKILLLEVEL 技能名 (=,+,-) 等级 | 调整技能等级 | SKILLLEVEL 冰咆哮 + 1 |
| DELNOJOBSKILL | 删除所有非本职业技能 | DELNOJOBSKILL |

宝宝类命令:
| 命令 | 功能说明 | 示例 |
|------|----------|------|
| RECALLMOB 怪物名 宝宝等级 叛变分钟 变色 固定颜色 | 召唤宝宝 | RECALLMOB 神兽 7 60 0 |
| 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全服弹窗 | SENDMSG 0 恭喜%s获得屠龙 |
| CLEARMAPMON 地图名 | 清除地图内所有怪物 | CLEARMAPMON 3 |
| KICK | 将当前玩家踢下线 | KICK |
| KILL 数值 | 杀死当前玩家 | KILL 1 |



**变量与系统常量**

写脚本时经常需要显示一些动态内容,比如玩家名字、当前行会、沙巴克信息,这些用系统常量直接调。

| 常量 | 含义 |
|------|------|
| <$USERNAME> | 当前玩家名字 |
| <$LEVEL> | 当前玩家等级 |
| <$JOB> | 职业 |
| <$GENDER> | 性别 |
| <$PKPOINT> | PK值 |
| <$HP> | 当前血量 |
| <$MP> | 当前魔法值 |
| <$MAXHP> | 最大血量 |
| <$MAXMP> | 最大魔法值 |
| <$GOLDCOUNT> | 背包金币数 |
| <$GAMEGOLD> | 元宝数 |
| <$CREDITPOINT> | 声望值 |
| <$USERWEAPON> | 手里拿的武器名称 |
| <$OWNERGUILD> | 沙巴克行会名称 |
| <$LORD> | 沙城主名字 |
| <$CASTLEGOLD> | 沙巴克总金币 |
| <$DATETIME> | 当前服务器时间 |

这些常量用在#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后默认弹出什么功能界面。

**脚本符号使用规则**

写脚本还得搞懂几个符号的用法:

[] 方括号括起来的表示段标签,比如[@main]。
<> 尖括号括起来的表示可点击的选项,里面用/分隔显示文字和跳转段。比如<购买/@buy>,玩家点“购买”就跳去[@buy]段。
\ 反斜杠表示换行。
; 分号放行首表示这一行是注释,不执行。
空格 命令和参数之间通常用空格隔开,具体看引擎要求。
/ 斜杠在选项里分隔显示文本和跳转目标。

写一个最简单的NPC对话例子:

[@main]
#say
欢迎光临我的小店。\
你可以进行以下操作:\
<购买药品/@buy>\
<修理装备/@repair>\
<没什么事/@exit>

[@buy]
#say
你需要买什么?\
<强效金疮药/@buy_hp>\
<强效魔法药/@buy_mp>

[@buy_hp]
#act
give 强效金疮药 5
#say
给你5瓶药。

这个例子里用到了段跳转、say显示、act执行命令,是最基础的脚本框架。