传奇脚本变量、命令名的详细解释

2018-11-19 16:44:28  阅读 5413 次 评论 1 条


【变量属性】 [000-999] 
『属性说明』:该变量有下线、重新启动服务器均不消失的强记录性。保存在hum.db(还是在mir.db记不太清 
楚。望高手指正)该变量只有2种状态。1和0 
『用法』:因为该变量记录性比较强。而且如果产生读写操作时服务器的操作不是很大。所以作为记录一些人 
物的下线后需要保留的数据的话作用十分大,大部分任务时常用到他。但是该变量值只有1和0的两种状态。而 
且根据M2不同,其个数也不相同。建议您一定要活用变量,尽量避免浪费该变量。 

变量 取值范围 属性 类型 解释
G 0-999 整数型 全局 重启服务器保存.(存放在Mir200/Global.ini文件里面)
A 0-999 字符型 全局 重启服务器保存.(存放在Mir200/Global.ini文件里面)
I 0-999 整数型 全局 重启服务器不保存. 服务器重启自动重置为0。
U 0-999 字符型 全局 重启服务器不保存.
         
B 0-99 字符型 个人 下线保存.(存放在人物数据库文件里面) 注意:所有B变量字符串总长度不能超过2000字节
C 0-99 整数型 个人 下线保存.(存放在人物数据库文件里面)
S 0-999 字符型 个人 临时变量 下线不保存.小退归0.
N 0-999 整数型 个人 临时变量 下线不保存.小退归0.
P 0-99 整数型 个人 临时变量 下线不保存.仅在当前NPC有效.当Close关闭对话时.所有P变量归0.
M 0-99 整数型 个人 临时变量 下线不保存.切换地图清空.
D 0-9 整数型 个人 临时变量 下线不保存.摇筛子变量.
T 0-9 整数型 个人 临时变量 下线不保存.NPC临时变量,用于过程传递参数,该变量只读不能操作.

 


P(0-9) 
『属性说明』:该变量只对当前对话NPC内有效果。如果中途点其他NPC或者对话产生close、关闭时所有P变量 
均归0。该变量取值范围:(0-?)根据M2最大值不同 
『用法』:该变量没有NPC间传递性作为临时变量多重复使用效果十分好。而且因为脚本命令有对该变量进行加 
/减/赋值/随机取值等运算,他和goto的配合可以使脚本中出现仿for循环的效果。并且因为他不传递的性质其 
随机取值也能与RANDOM媲美。 
D(0-9) 
『属性说明』:该变量在人物不下线时对全局NPC通用传递。该变量取值范围:同P变量 
『用法』:既有像[0-?]变量一样的人物属性私有变量的效果又有像P变量一样的运算功能!唯一不足就是下线 
后该变量会被清空。可是如果配合上[000]变量或者namelist变量的记录性。实在是功能强大的个人隐私属性! 
不过本人无端的猜测该变量与P变量是保存在客户端内存的:)无任何根据如果不是请当个玩笑 
G(0-9) 
『属性说明』:该变量不属于人物属性范围,对于全服务器内该变量唯一并且全局NPC通用传递。该变量取值 
范围:同P变量 
『用法』:这个变量是唯一的一个不属于任何人物而属于服务器的变量,该变量通过任何人的运算均产生效果 
。而且不保存在任何人的属性中。(好象是在mir.db?望高手指正)但是需要注意服务器关闭后该变量清空,目 
前尚需要通过综合namelist或者[000]变量后才可以使其保存。 
Namelist.txt 
『属性说明及用法』:他为什么也属于一个变量,因为他的工作方式与变量一样,而且由于是直接对硬盘的读 
写反更牢*一些。而且他的实现也很特殊,没有取值范围的限制,只有自己的名字记录在任意的文本内,具体 
操作起来还很容易。作为变量的扩展起了不可替代的作用。而且有些M2的功能还需要这些的变量进行扩展。所 
以该变量的应用和功能实在需要加强。 
★友情提示您:该变量的操作请适可而止,如果在同一时间内进行大量的硬盘读/写/查找/检测/操作是对 
服务器稳定性和硬件极大的伤害!因为该变量只针对人物有效。如果某个命令需要进行大量的namelist操作的 
话。那许多人同时进行该命令的时候实在不能说不是对服务器的一个严峻的考验。 
■此处仅代表个人意见:脚本的功能大体是一种简易汇编语法具体操作的累积。而活用这些变量是脚本精 
华所在,脚本基础命令是一些简单针对这些变量的操作,优秀的脚本系统是通过这些变量和命令编写出来的功 
能。而后来所添加的脚本命令大部分是独立的功能,如果这样下去功能固然无限的增多,但是M2却也在无限的 
增大。

 

变量与数字之间的常用格式:

small G88 5 ;检测变量G88,是否小于5
large G88 5 ;检测变量G88,是否大于5
equal G88 5 ;检测变量G88,是否等于5
mov G88 5 ;设置G88=5
INC G88 5 ;设置变量G88=G88+5
DEC G88 5 ;设置变量G88=G88-5
MUL G88 5 ;设置变量G88=G88*5
DIV G88 5 ;设置变量G88=G88/5
PERCENT G88 5 ;设置变量G88=G88/5*100%

变量与变量之间的常用格式:

small M88 <$STR(G88)> ;检测私人变量M88,是否小于全局变量G88
large M88 <$STR(G88)> ;检测私人变量M88,是否大于全局变量G88
EQUAL M88 <$STR(G88)> ;检测私人变量M88,是否等于全局变量G88
mov G88 <$STR(M88)> ;设置全局变量G88=M88
inc G88 <$STR(M88)> ;设置全局变量G88=G88+M88
DEC G88 <$STR(M88)> ;设置全局变量G88=G88-M88
MUL M88 $STR(M89) ;设置私人变量M88=M88*M89
DIV M88 $STR(M89) ;设置私人变量M88=M88/M89
PERCENT M88 $STR(M89) ;设置私人变量M88=M88/M89*100%


以下为脚本命令的解释

【检测后缀命令】 
此属性命令为#IF后#ACT前,作为检测是否为真的命令。 
〖CHECK [001-?] 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〗[控制符](数值)检查当前人物所带宝宝数量
=====================================================
====================================================



变量名称 说明 
<$USERNAME> 人物名称 
<$GUILDNAME> 行会名称 
<$RANKNAME> 行会职位名称 
<$LEVEL> 等级 
<$HP> 生命值 
<$AC> 防御力 
<$MAXAC> 最高防御力 
<$MAC> 魔法防御力 
<$MAXMAC> 最高魔法防御力 
<$DC> 物理攻击力 
<$MAXDC> 最高物理攻击力 
<$MC> 魔法力 
<$MAXMC> 最高魔法力 
<$SC> 道术 
<$MAXSC> 最高道术 
<$EXP> 当前经验值 
<$MAXEXP> 升级经验值 
<$PKPOINT> PK点数 
<$CREDITPOINT> 声望点数 
<$GOLDCOUNT> 金币数量 
<$GAMEGOLD> 元宝数 
<$GAMEPOINT> 游戏点数 
<$HW> 腕力 
<$MAXHW> 最高腕力 
<$BW> 背包重量 
<$MAXBW> 最高背包重量 
<$WW> 负重力 
<$MAXWW> 最高负重 
<$HUNGER> 饥饿程度 
<$LOGINTIME> 登录时间 
<$LOGINLONG> 登录时长 
<$DRESS> 衣服 
<$WEAPON> 武器 
<$RIGHTHAND> 蜡烛 
<$HELMET> 头盔 
<$NECKLACE> 项链 
<$RING_R> 右戒指 
<$RING_L> 左戒指 
<$ARMRING_R> 右手镯 
<$ARMRING_L> 左手镯 
<$BUJUK> 护身符 
<$BELT> 腰带 
<$BOOTS> 鞋子 
<$CHARM> 宝石 
<$CASTLENAME> 沙城名称 

服务器信息

变量名称
 说 明
 
<$SERVERNAME> 服务器名字 
<$SERVERIP> 服务器IP地址 
<$WEBSITE> 游戏网址 
<$BBSSITE> 论坛网址 
<$CLIENTDOWNLOAD> 客户端程序下载地址 
<$QQ> 联系QQ号 
<$PHONE> 联系电话号码 
<$BANKACCOUNT0> 银行帐号信息 
<$BANKACCOUNT1> 银行帐号信息 
<$BANKACCOUNT2> 银行帐号信息 
<$BANKACCOUNT3> 银行帐号信息 
<$BANKACCOUNT4> 银行帐号信息 
<$BANKACCOUNT5> 银行帐号信息 
<$BANKACCOUNT6> 银行帐号信息 
<$BANKACCOUNT7> 银行帐号信息 
<$BANKACCOUNT8> 银行帐号信息 
<$BANKACCOUNT9> 银行帐号信息 
<$GAMEGOLDNAME> 游戏币名称 
<$USERCOUNT> 在线人数 
<$DATETIME> 当前日期时间 
<$GAMEGOLDNAME> 游戏币名称 
<$HIGHLEVELINFO> 最高等人物信息 
<$HIGHPKINFO> 最高PK点数人物信息 
<$HIGHDCINFO> 最高攻击力人物信息 
<$HIGHMCINFO> 最高魔法力人物信息 
<$HIGHSCINFO> 最高道术力人物信息 

自定义变量

变量名称 说明 
[000-599] 该变量有下线、重新启动服务器均不消失的强记录性。保存在hum.db(还是在mir.db记不太清楚。望高手指正)该变量只有2种状态。1和0 
P(0-9) 该变量只对当前对话NPC内有效果。如果中途点其他NPC或者对话产生close、关闭时所有P变量均归0。该变量取值范围:(0-?)根据M2最大值不同 
D(0-9) 该变量在人物不下线时对全局NPC通用传递。该变量取值范围:同P变量 
G(0-9) 该变量不属于人物属性范围,对于全服务器内该变量唯一并且全局NPC通用传递。该变量取值范围:同P变量 
S(0-9) 该变量支持中文,重启服务器后消失 
Namelist.txt 他为什么也属于一个变量,因为他的工作方式与变量一样,而且由于是直接对硬盘的读写反更牢*一些。而且他的实现也很特殊,没有取值范围的限制,只有自己的名字记录在任意的文本内,具体操作起来还很容易。作为变量的扩展起了不可替代的作用。而且有些M2的功能还需要这些的变量进行扩展。所以该变量的应用和功能实在需要加强。 
使用命令 P\D\G变量使用说明:
检测相等:EQUAL 变量名 数值 
检测大于:LARGE 变量名 数值
检测小于:SMALL 变量名 数值
赋予数值:MOV 变量名 数值
加上指定数值:INC 变量名 数值
减去指定数值:DEC 变量名 数值
变量相加:SUM 变量名A 变量名B
变量赋予小于指定数值的随机非负数:MOVR 数值
把变量转为字符串:<$STR(变量)>
S变量使用说明:
该变量现在还无法由脚本直接赋予数值,只能够由queryvalue赋予数值
[000-599]变量使用说明:
定义变量:SET [变量名] 数值
连续变量清零:RESET [变量名] 连续数字
检测相等:CHECK [变量数值] 数值
弹出个输入框由玩家自己赋变量数值:
Getstring 变量名 ;分配给queryvalue的变量 
queryvalue 弹出框上面给玩家的信息 是否输入中文(1为数字2为中文) 可以输入字符长度 跳转到@getstring几执行(比如1就跳转到@getstring1) 
 
 

新增变量

s0-s99 人物字符串变量,
t0-t99 全局字符串变量 
支持以下操作
EQUAL 
LARGE 
SMALL 
INC 
DEC 
MOV
Getstring
同时修改了脚本参数。目前可以使用 
$STR(x)用于任何脚本参数中 

MOV s0 屠龙刀
MOV G0 1
GIVE $STR(s0) $STR(G0) 

MOV t0 $USERNAME
INC t0 拥有元宝数:
INC t0 $GAMEGOLD
INC t0 个

则执行完后,t0变量的值就是“XXX拥有元宝数:YYY个” 
DEC操作,格式:DEC t0 X Y
其中X表示开始位置 ,Y表示数量,该操作的结果是:删除t0字符串中从X开始的Y个字符。
MOV命令,支持把变量(包括全局变量、自定义变量和内部定义变量如$GAMEGOLD等) 
$STR(x) $GAMEGOLD 等可以用于任何脚本参数中 
 
进一步完善 T全局字符串变量100个S 人物字符串变量100个G 变量100个(0-65536)
目前支持以下字符串操作
EQUAL 
LARGE 
SMALL 
INC 
DEC 
MOV
Getstring

同时使用$STR(x) (全局变量、自定义变量和其他系统变量) 都可以用于[ 任何脚本 ]参数中。
例如:无所不能
checkgold $STR(s1)
CHECKITEM $STR(t1) $STR(s2)
changeexp = $str(G0)
changelevel = $str(s1)
CheckOnline $str(s1)
EQUAL D0 $str(s0)
LARGE D1 $baoshi(1)
SMALL D2 $Level
CHECKMAPNAME $Str(S9)
TAKE $STR(S8)
TAKEW $STR(S8) $STR(s3)
GIVE $STR(S2) $STR(D8)
MOV S0 天下第一男战士\
INC S0 $USERNAME
INC S0 \
DEC S0 13 2 


 



手机扫描二维码访问

本文地址:https://www.uc845.com/post/73.html
版权声明:本文为原创文章,版权归 游戏开发者 所有,欢迎分享本文,转载请保留出处!
您需要 登录账户 后才能发表评论

发表评论


表情

评论列表

  1. 学习传奇教程
    学习传奇教程  @回复
    楼主收徒吗?我想拜你为师,学习写传奇脚本,写传奇版本,写传奇引擎。 face_19