芝麻论坛 发表于 2013-2-19 22:51:15

传奇一般脚本制作命令

传奇脚本命令大全
命令与函数:
checkjob (Warr, Wizard, Taos) ;测试职业
checkgold (金币数) ;测试金币
checklevel (等级) ;测试等级
checkitem (物品名) (数量) ;测试物品及数量
give gold (金币数) ;给钱
give (物品名) (数量) ;给物及数量
take gold (金币数) ;拿走钱
take (物品名) (数量) ;拿走物及数量
checkpkpoint (pk值) ;测试PK值
checkluckypoint (幸运值) ;幸运值正值为好,负值为差
checkduraeva (物品名) (数值) ;一般测试矿物等物品的品质
checkhum (地图名) (数值) ;测试这个地图的人数
checkmonmap (地图名) (数值) ;测试这个地图的怪物数
map (地图名) ;移动到这个地图
mapmove (地图名) (坐标A) (坐标B) ;移动到这个地图指定坐标
monclear 地图清除
close 关闭对话框
TimeRecall (设定时间值) ;分钟,一般指进入地图时间限制
BreakTimeRecall ;中断设定时间
ExchangeMap (地图名) ;与指定地图里的人交换位置
daytime sunset ;一天时间
checkbaggage ;测试背包满没
small (变量) (数值) ;测试变量是不是小于指定数值
large (变量) (数值) ;测试变量是不是大于指定数值
equal (变量) (数值) ;测试变量是不是等于指定数值
mov (变量) (数值) ;让变量等于指定数值
sum (变量A) (变量B) ;A+B 注意,如果还要家第3个数直接换行写sum (变量C)
注:关于SUM的详解
首先有MOV (变量X) 0 ;(变量X)清0
sum (变量A) (变量B) ;X=A+B
sum (变量C) ;X=X+C
movr (变量) (数值) ;随机把指定数值以下的数(正数)给变量
inc (变量) (数值) ;让变量自动加指定数值到变量
playdice (骰子数) @xxx ;玩骰子,跳转到标签[@xxx]
random (随机数) ;一般用在#IF语句中作为触发#IF机率,有时随机数=并列#IF语句数用于随机多项选择,既:
#IF RANDOM 3 #SAY() #ELSEACT
#IF RANDOM 3 #SAY() #ELSEACT
#IF RANDOM 3 #SAY() #ELSEACT
Check [条件数] 1 ;测试[条件数]触发与否 1(触发)
SET [条件数] 1 ;设置[条件数]触发

batchDelay (暂停时间) ;一般为1
addbatch (地图名1)
addbatch (地图名2)
addbatch (地图名3)
addbatch (地图名4)
addbatch (地图名5)
batchmove ;一步步到下一个地图直到5


param1 01141 ;01141=(地图名)
param2 10
param3 10
mongen 火焰沃玛2(怪物名) 30 10


;玩骰子脚本解析

#IF
equal p9 1 ;测试 p9是不是等于1
#ACT
goto @cube ;是的,到@cube
BreakTimeRecall (中断设定时间)
break

#IF
equal p9 9 ;测试 p9是不是等于9
#ACT
goto @quit ;是的,到@quit 退出
BreakTimeRecall (中断设定时间)
break

[@main-1]
#IF
#ACT
mov p9 0 ;测试 p9是不是等于0
#SAY
say ;欢迎词
<下一步/@pre_cube>

[@pre_cube]
#IF
checkitem 筹码 1 ;测试有没有筹码
#ACT
mov p9 1 ;有,让p9=1
take 筹码 1 ;给出一个筹码
movr d0 6 ;;随机把6以下的数(正数)给d0
inc d0 1 ;让d0自动加1到d0
playdice 1 @cube ;玩骰子,点击到标签[@cube]
#SAY
正在投骰子. \ <下一个/@cube>
#ELSESAY
quit
<退出/@Quit>
#ELSEACT
mov p9 9 ;转到标签@quit并让P9等于9

[@Quit]
#IF
#ACT
map B011 ;退出到B011地图
[@cube]
#IF
#SAY
骰子的点数 <$STR(D0)> \ ;<$STR(D0)>是变量,把D0数值型转字符型
你可以前进 <$STR(D0)> \ <移动/@next_cube>

[@next_cube]
#IF
equal d0 1 ;如果 d0=1
#ACT
goto @posi1 ;到POSI1
break

#IF
equal d0 2
#ACT
goto @posi2
break

#IF
equal d0 3
#ACT
goto @posi3
break

#IF
equal d0 4
#ACT
goto @posi4
break

#IF
equal d0 5
#ACT
goto @posi5
break

#IF
equal d0 6
#ACT
goto @posi6
break

[@Posi1]
#IF
#ACT
batchDelay 1 ;一般为1(暂停时间)
addbatch B102 ;步进地图名1
batchmove ;移动到最后一个步进地图

[@Posi2]
#IF
#ACT
batchDelay 1
addbatch B102
addbatch B103
batchmove

[@Posi3]
#IF
#ACT
batchDelay 1
addbatch B102
addbatch B103
addbatch B104
batchmove

[@Posi4]
#IF
#ACT
batchDelay 1
addbatch B102
addbatch B103
addbatch B104
addbatch B105
batchmove

[@Posi5]
#IF
#ACT
batchDelay 1
addbatch B102
addbatch B103
addbatch B104
addbatch B105
addbatch B106
batchmove

[@Posi6]
#IF
#ACT
batchDelay 1 ;一般为1(暂停时间)
addbatch B102 ;步进地图名1
addbatch B103 ;步进地图名2
addbatch B104 ;步进地图名3
addbatch B105 ;步进地图名4
addbatch B106 ;步进地图名5
addbatch B107 ;步进地图名6
batchmove ;移动到最后一个步进地图(这里是6)

;结束


SET

语句:
#IF
……
#ACT(SAY)
……
#ELSESAY(ACT) ;ELSE的两句是并列的,都是IF<>(条件)的动作
……
#ELSEACT(SAY)
……

goto (标签名)
break (中断)
\ ;换行


变量:
<$USERNAME> 当前用户名
<$GUILDWARFEE>行会战金币数
<$LORD>沙巴克行会头名
<$OWNERGUILD>沙巴克行会名
<$UPGRADEWEAPONFEE>升级武器价格
<$USERWEAPON> 放在对话框里的武器名字
<$STR(变量)> 把变量转换为字符型
goto @段 ;跳转到指定段,开始执行相当于B中的goto语句

<选择项目/@段> ;选择项目后转称到指定段,相当于C中的case语句

#say 语句 ;语句设定为字符,不用加任何定界符

#act 执行命令 ;符合3.0规定的任何系统已定义命令

give 物品 数量 ;给多少东西,除了物器数据库中有的物品,还有金币,
;在大多数汉化版3.0中都汉化为“金”

take 物品 数量 ;同上,只是与上面相反,一个是给东西,一个是收回东西

map 地图名 ;移动到这个地图的随机坐标,地图名为地图的数字人码

mapmove 地图名 坐标A 坐标B ;同上,只是指定了坐标

monclear 地图名 ;清除这个地图上刷的怪物

MonGen 怪物名称 数量 时间 ;刷怪物,与刷怪角本用法相同

TimeRecall 数值 ;数值为分钟,定义进入某地的时间限制。

BreakTimeRecall ;中断上面那个语句设定的时间

hairstyle 数值 ;改变头发类型

haircolor 红值 绿值 蓝值 ;值域为0 ~ 255 设定头发颜色

close ; 关闭对话框


======================****************************========================
---------------------- 程 序 中 的 变 量 与 常 量 ------------------------
======================****************************========================

变量 ;变量用字母表示,在程序中可以赋任何数据 名称只限于P0-P9,D0-D9

mov 变量 数值 ;给变量赋值

inc 变量 数值 ;让变量自动加指定数值到变量,相当于程序中的x=x+n

sum 变量A 变量B ;变量求和不要与int混淆,需要下面的组合语名才能实现

MOV 变量X 0 ;变量X,初值。
sum 变量A 变量B ;X=A+B
sum 变量C ;X=X+C 最后在程序中得到的是X值,实际X=A+B+C
;如果只写中间一句是无意义的,只能导致错误

movr 变量 数值 ;定义随机变量,变量值为 “0 到 数值”

random 数值 ;当数值=随机数时则为1否则为0

<$STR(变量)> ;显示变量时用,可以将变量值显示在游戏里,用在 #say后面。


=========================*******************************========================
------------------------- 程 序 中 的 逻 辑 判 断 语 句 ------------------------
=========================*******************************========================

;n为任何正整数,是逻辑变量,有0值和1值,初始0值

#IF
条件--执行
#elsesay 或者 #elseact
否定--执行 ;相当于程序中的条件判断

SET 1 ;设置逻辑变量为真

Check 1 ;测试逻辑变量是否为真,可以测试是否已经完成了任务

small 变量 数值 ;如果“变量 < 数值”则为1否则为0

large 变量 数值 ;如果“变量 > 数值”则为1否则为0

equal 变量 数值 ;如果“变量 = 数据”则为1否则为0

checkjob Warr(Wizard、Taos) ;测试职业 成功为1否则为0

checkgold 数值 ;拥有金币数>=数值为1否则为0

checklevel 数值 ;人物等级>=数值为1否则为0

checkitem 物品 数值 ;测试拥用物品的数量

genderman ;测试性别为男,如果为男则为1否则为0

checkbaggage ;测试背包是否已满,满时为1否则为0

checkpkpoint 数值 ;数值为PK值,PK值数>值时为1否则为0

checkluckypoint 数值 ;同上,只是测的是幸运值

checkmonmap 地图名 数值 ;同上,只是测的是怪物数量

checkduraeva 物品名 数值 ;同上,只是测试有品质的物品的品质

checkhum 地图名 数值 ;同上,测试这个地图的人数

checkitemw 物品 检测身上所带的物品

takew 物品 直接从身上回收物品

checkmagic 技能名称 检测已经修炼的技能
脚本大全
传奇商用NPC开头解释(部分,补足请补足)
%100 代表买东西是原价格还是双倍价格
+40 买肉
+1 卖肉
+43 武器有关(修)
+15 头盔
+10 买衣服
+11 修衣服
+26 修手镯类
+0 买各种药水
+42 卖各种药水
+30 蜡烛等.
+25 特殊水
+3 买卷轴,书类
+4 卖书类
+19 项链
+20 项链
+21 项链
+22 买戒指
+23 卖戒指
+24 买手镯
+26 卖手镯
+5 修炼武器或买武器
+6 修炼武器或卖武器
================================

checkjob (Warr, Wizard, Taos) ;测试职业
checkgold (金币数) ;测试金币
checklevel (等级) ;测试等级
checkitem (物品名) (数量) ;测试物品及数量
give gold (金币数) ;给钱
give (物品名) (数量) ;给物及数量
take gold (金币数) ;拿走钱
take (物品名) (数量) ;拿走物及数量
checkpkpoint (pk值) ;测试PK值
checkluckypoint (幸运值) ;幸运值正值为好,负值为差
checkduraeva (物品名) (数值) ;一般测试矿物等物品的品质
checkhum (地图名) (数值) ;测试这个地图的人数
checkmonmap (地图名) (数值) ;测试这个地图的怪物数
map (地图名) ;移动到这个地图
mapmove (地图名) (坐标A) (坐标B) ;移动到这个地图指定坐标
monclear 地图清除
close 关闭对话框
TimeRecall (设定时间值) ;分钟,一般指进入地图时间限制
BreakTimeRecall ;中断设定时间
ExchangeMap (地图名) ;与指定地图里的人交换位置
daytime sunset ;一天时间
checkbaggage ;测试背包满没
small (变量) (数值) ;测试变量是不是小于指定数值
large (变量) (数值) ;测试变量是不是大于指定数值
equal (变量) (数值) ;测试变量是不是等于指定数值
mov (变量) (数值) ;让变量等于指定数值
sum (变量A) (变量B) ;A+B 注意,如果还要家第3个数直接换行写sum (变量C)
注:关于SUM的详解
首先有MOV (变量X) 0 ;(变量X)清0
sum (变量A) (变量B) ;X=A+B
sum (变量C) ;X=X+C
movr (变量) (数值) ;随机把指定数值以下的数(正数)给变量
inc (变量) (数值) ;让变量自动加指定数值到变量
playdice (骰子数) @xxx ;玩骰子,跳转到标签
random (随机数) ;一般用在#IF语句中作为触发#IF机率,有时随机数=并列#IF语句数用 于随机多项选择,例如: #IF RANDOM 3 #SAY() #ELSEACT
Check 1 ;测试触发与否 1(触发)
SET 1 ;设置触发
Monclear 地图 清理这个地图!
Param1 地图 地图名
Param2 横坐标 坐标
Param3 纵坐标 坐标
MonGen 怪物名称 数量 时间
TimeRecall 时间 时间限制


二。脚本变量:
<$USERNAME> 当前用户名
<$GUILDWARFEE>行会战金币数
<$LORD>沙巴克行会头名
<$OWNERGUILD>沙巴克行会名
<$UPGRADEWEAPONFEE>升级武器价格
<$USERWEAPON> 放在对话框里的武器名字
<$STR(变量)> 把变量转换为字符型

脚本教程:变量、命令名的解释
【变量属性】

『属性说明』:该变量有下线、重新启动服务器均不消失的强记录性。保存在hum.db(还是在mir.db记不太清 楚。望高手指正)该变量只有2种状态。1和0
『用法』:因为该变量记录性比较强。而且如果产生读写操作时服务器的操作不是很大。所以作为记录一些人物的下线后需要保留的数据的话作用十分大,大部分任务时常用到他。但是该变量值只有1和0的两种状态。而且根据M2不同,其个数也不相同。建议您一定要活用变量,尽量避免浪费该变量。
P(0-9)
『属性说明』:该变量只对当前对话NPC内有效果。如果中途点其他NPC或者对话产生close、关闭时所有P变量均归0。该变量取值范围:(0-?)根据M2最大值不同
『用法』:该变量没有NPC间传递性作为临时变量多重复使用效果十分好。而且因为脚本命令有对该变量进行加/减/赋值/随机取值等运算,他和goto的配合可以使脚本中出现仿for循环的效果。并且因为他不传递的性质其
随机取值也能与RANDOM媲美。
D(0-9)
『属性说明』:该变量在人物不下线时对全局NPC通用传递。该变量取值范围:同P变量
『用法』:既有像变量一样的人物属性私有变量的效果又有像P变量一样的运算功能!唯一不足就是下线 后该变量会被清空。可是如果配合上变量或者namelist变量的记录性。实在是功能强大的个人隐私属性!
不过本人无端的猜测该变量与P变量是保存在客户端内存的:)无任何根据如果不是请当个玩笑
G(0-9)
『属性说明』:该变量不属于人物属性范围,对于全服务器内该变量唯一并且全局NPC通用传递。该变量取值 范围:同P变量
『用法』:这个变量是唯一的一个不属于任何人物而属于服务器的变量,该变量通过任何人的运算均产生效果。而且不保存在任何人的属性中。(好象是在mir.db?望高手指正)但是需要注意服务器关闭后该变量清空,目前尚需要通过综合namelist或者变量后才可以使其保存。
Namelist.txt 
『属性说明及用法』:他为什么也属于一个变量,因为他的工作方式与变量一样,而且由于是直接对硬盘的读写反更牢*一些。而且他的实现也很特殊,没有取值范围的限制,只有自己的名字记录在任意的文本内,具体 操作起来还很容易。作为变量的扩展起了不可替代的作用。而且有些M2的功能还需要这些的变量进行扩展。所 以该变量的应用和功能实在需要加强。
★友情提示您:该变量的操作请适可而止,如果在同一时间内进行大量的硬盘读/写/查找/检测/操作是对
服务器稳定性和硬件极大的伤害!因为该变量只针对人物有效。如果某个命令需要进行大量的namelist操作的
话。那许多人同时进行该命令的时候实在不能说不是对服务器的一个严峻的考验。
■此处仅代表个人意见:脚本的功能大体是一种简易汇编语法具体操作的累积。而活用这些变量是脚本精
华所在,脚本基础命令是一些简单针对这些变量的操作,优秀的脚本系统是通过这些变量和命令编写出来的功能。而后来所添加的脚本命令大部分是独立的功能,如果这样下去功能固然无限的增多,但是M2却也无限的增大。所以建议FTSM多开发和完善M2,n那是脚本发展之福。
以下为脚本命令的解释
【检测后缀命令】
此属性命令为#IF后#ACT前,作为检测是否为真的命令。
〖CHECK 1/0〗 查看人物指定的变量是否为1/0。如果为真则通过至#act
〖RANDOM (1-?)〗 随机
一个数字,根据后边的数字判定当前通过至#act的几率。
★注意这里有一些用法错误。★
错误一:
#if
RANDOM 3
#act
goto 1
break
#if
RANDOM 3
#act
goto 2
break
#if
RANDOM 3
#act
goto 3
break
很多人认为random的具体运行是首先在3以下随机取一个值,然后该脚本内的random 3都不再取值了。那样理解的时候goto 1、2、3的几率是相等的,都是1/3。这是一个理解上的错误,实际这里运行的操作是这样的,到达 1的几率为1/3,到达2的几率为先2/3然后1/3就是2/9。而到达3的几率则为2/3然后2/3然后1/3实际几率为4/27
!同样错误的还有如下写法
#if
RANDOM 3
#act
goto 1
#elseact
#if
RANDOM 3
#act
goto 2
#elseact
#if
RANDOM 3
#act
goto 3
#elseact
close
错误二:
#if
RANDOM 3
#act
goto 1
break
#if
RANDOM 2
#act
goto 2
break
#if
RANDOM 1
#act
goto 3
break
有人认为在第一个random的时候会给一个隐藏的值在3以下做一个赋值。然后以后的random就是检测是否自己的 random值和这个隐藏值相同,如果相同则#act。这个也是一种错误理解,虽然同是对random理解错误造成的, 但是该错误与错误一理解上是不同的。但是这种随机的设计方式是提倡的,利用P变量的随机取值是可以完成的
。具体随机的用法请查看【脚本教程示例:随机处理系统】
〖EQUAL〗(变量)(数值)测试指定变量的值是否等于该命令指定值,可惜的是此处无法用PDG等变量,只能用数字常量!强烈建议Jacky添加该功能。
〖LARGE〗(变量)(数值)测试指定变量的值是否大于该命令指定值,同样非常可惜该数值只能为常量。
〖SMALL〗(变量)(数值)测试指定变量的值是否小于该命令指定值,同样非常可惜该数值只能为常量。
〖GENDER 〗(man/woman)检测是否为男/女
〖hour/min〗(时间1)(时间1)检测当前时间(小时/分钟)是否为时间1与时间2之间。
〖CHECKLEVEL〗(数值)测试等级数量是否大于该命令指定值,同样非常可惜该数值只能为常量。
〖CHECKJOB〗(职业)测试对话职业是否为指定职业,其后缀的根据M2不同而不同基础M2为:Warr, Wizard, Taos。
〖CHECKITEM〗(物品名称)(数量)查看人物背包中是否指定物品名称的数量是否大于该命令指定值,该数量不写默认为1既检测有没有该物品。同样非常可惜该数值只能为常量。
〖CHECKITEMW〗(物品名称)(数量)查看人物所佩带装备中是否指定物品名称的数量是否大于该命令指定值,该数量不写默认为1既检测有没有该物品。同样非常可惜该数值只能为常量。
〖CHECKGOLD〗(数值)测试金币数量是否大于该命令指定值,同样该数值只能为常量。
〖ISTAKEITEM〗(物品名称)检测刚刚取下的物品是否指定物品名称。
〖CHECKDURAEVA〗(物品名)(数值)查看人物背包中是否指定的物品名称的持久是否大于该命令指定值,该数量不写默认为1既检测有没有该物品。同样非常可惜该数值只能为常量。
〖DAYOFWEEK〗(星期数)查看当天是否为指定的星期数量。
〖CHECKPKPOINT〗(数值)测试PK值是否大于该命令指定值。
〖CHECKLUCKYPOINT〗(数值)测试幸运值是否大于该命令指定值。
〖CHECKMONMAP〗(地图名)(数值)测试指定的地图名中的怪物数量是否大于该命令指定值。同样非常可惜该数值只能为常量。
〖CHECKHUM〗(地图名)(数值)测试指定的地图名中的人物数量是否大于该命令指定值。同样非常可惜该数值只能为常量。
〖CHECKBAGGAGE〗测试背包是否满了
〖CHECKNAMELIST〗(文件名)检测指定路径下文件名的文件内是否有该玩家当前人物名称。
〖CHECKIPLIST〗(文件名)检测指定路径下文件名的文件内是否有该玩家当前IP地址。
#〖CHECKMARRYED〗检测当前对话人物是否结过婚。
#〖CHECKGUILDMASTER〗检测当前对话人物是否属于行会掌门。
#〖CHECKOFGUILD〗(行会名)检测当前对话人物是否属于指定行会。
#〖CHECKGUILDOFSBK〗检测当前对话人物所属于行会是否为沙。
#〖CHECKATTACKSBKGM〗检测当前对话人物所属于行会是否为当前攻沙行会。
#〖CHECKACCOUNTLIST〗(文件名)检测指定路径下文件名的文件内是否有该玩家当前帐号。
#〖CHECKPAYMENT〗检测当前对话人物是否充值。
#〖CHECKBBCOUNT〗(数值)检查人物所带宝宝数量。
#〖CHECKCREDITPOINT〗(数值)检查当前人物的声望是否大于命令指定数值。
#〖EXECHECK NAMEIPLIST〗(文件名)检测指定路径下文件名的文件内该玩家人物名称后的IP是否与当前登陆IP相同。
#〖EXECHECK DIR〗检查当前人物对面方向站的人物方向是否正确,多用于结婚。
#〖EXECHECK DIR 1〗检查当前人物对面方向站正确方向的人物是否与当前人物性别一致。多用于结婚。
#〖EXECHECK DIR 2〗检查当前人物对面方向站正确方向的人物是否与当前人物性别不同。多用于结婚。
#〖EXECHECK POSTLEVEL〗(数值)检查当前人物对面方向站正确方向的人物的等级是否大于命令指定数值。
#@〖CHECKGUILDLIST〗(文件名)检测指定路径下文件名的文件内该玩家所属行会名称是否存在。
#@〖ISADMIN〗检查当前人物是否为游戏管理员。
#@〖HAVEGUILD〗检查当前人物是否加入了行会。
#@〖ISCASTLEGUILD〗检测当前对话人物是否属于沙。
#@〖ISCASTLEMASTER〗检测当前对话人物是否为沙掌门。
#@〖ISGUILDMASTER〗检测当前对话人物是否为行会的掌门。
#@〖ISNEWHUMAN〗检测当前对话人物是否为刚注册第一次进入游戏。
#@〖CHECKSLAVECOUNT〗(数值)检查当前人物所带宝宝数量是否指定的数值。
〖CHECKMONAREA〗未知
〖CHECKOPEN〗未知
〖CHECKUNIT〗未知

页: [1]
查看完整版本: 传奇一般脚本制作命令