在传奇游戏的世界里,脚本命令是构建丰富游戏体验的关键元素。无论是创建任务、设置 NPC 交互,还是控制游戏中的各种事件,脚本命令都发挥着不可或缺的作用。对于想要深入了解游戏机制、甚至进行游戏修改和扩展的玩家来说,掌握脚本命令至关重要。下面,我们就来详细讲解一些常见且重要的传奇脚本命令。
一、基础命令
(一)段定义与跳转
(@段):段用英文或数字表示,它是脚本中的一个标记,用于将脚本划分为不同的部分,方便管理和调用。例如 (@main) 通常可作为主程序段的开始标记 。
goto @段:这个命令的作用是跳转到指定的段并开始执行该段的脚本内容。类似于编程语言中的 goto 语句,它能让脚本的执行流程发生改变。比如在一个复杂的任务脚本中,当满足某个条件后,使用 goto @reward 跳转到奖励发放的代码段。
(二)对话与输出
#say 语句:用于在游戏中向玩家显示一段文本内容。语句设定为字符,无需添加任何定界符。例如 #say “欢迎来到传奇世界,勇士!”,当玩家触发相关脚本时,就会看到这样的提示信息 。
#elsesay 语句:通常与 #IF 条件判断配合使用。当 #IF 后的条件不成立时,就会执行 #elsesay 后面的语句内容。比如 #IF checkitem 金币 100,#ACT take 金币 100,#elsesay “你的金币不足 100”,当玩家金币不足 100 时,就会显示 “你的金币不足 100” 的提示 。
(三)动作执行
#act 执行命令:这里的执行命令需符合游戏系统 3.0 规定的已定义命令。它可以完成各种操作,如给玩家物品、传送玩家等。例如 #act give 生命药水 5,就是给玩家 5 个生命药水 。
#call 调用子程序命令:一般用于调用 QuestDiary 文件夹下的子程序命令。比如 #CALL (\ 任务 \ 主线任务.txt) @start,表示调用 D:\MirServer\Mir200\Envir\QuestDiary\ 任务文件夹下的主线任务.txt 文件中的 @start 代码段 。
二、物品与地图相关命令
(一)物品操作
give 物品 数量:给予玩家指定数量的物品。这里的物品可以是武器、药水、装备等游戏物品数据库中已有的物品,甚至包括金币。例如 give 裁决之杖 1,会给玩家 1 把裁决之杖 。
take 物品 数量 是否检测装备改名(0 或空:不检测,1:检测):与 give 命令相反,它是从玩家处收回指定数量的物品。比如 take 魔法药水 3,表示从玩家身上拿走 3 个魔法药水 。当需要检测装备是否被改名时,若设置为 1,则会进行检测,若装备被改名可能无法正常收回,若设置为 0 或留空则不检测装备改名情况 。
(二)地图操作
map 地图名:将玩家移动到指定的地图,并随机传送到该地图的某个坐标位置。地图名一般为地图对应的数字代码,例如 map 3,会将玩家随机传送到编号为 3 的地图 。
mapmove 地图名 坐标 A 坐标 B 范围:同样是传送玩家到指定地图,但这次是传送到指定的坐标位置。坐标 A 和坐标 B 确定了目标坐标点,范围参数若留空或者设为 0,则为定点传送;若设置了范围值,则会在以该坐标为中心,指定范围的区域内随机传送玩家 。例如 mapmove 5 100 200 10,表示将玩家传送到编号为 5 的地图上,坐标 (100, 200) 周围 10 范围内的某个随机点 。
monclear 地图名:清除指定地图上刷新的所有怪物。比如 monclear 7,会将编号为 7 的地图上的怪物全部清除 。
MonGen 怪物名称 数量 时间:在游戏中按照设定刷新怪物。怪物名称为游戏怪物数据库中已有的怪物名字,数量指定刷新怪物的数量,时间表示每隔多久刷新一次怪物。例如 MonGen 半兽人 10 60,表示每隔 60 秒在当前位置刷新 10 个半兽人 。
三、时间与特殊效果命令
(一)时间限制
TimeRecall 数值:数值的单位为分钟,用于定义玩家进入某个区域或执行某个操作的时间限制。例如 TimeRecall 30,表示玩家进入相关区域后,30 分钟后会被传送回原来的位置 。
BreakTimeRecall:用于中断由 TimeRecall 语句设定的时间限制。比如玩家在规定时间内完成了特殊任务,就可以使用这个命令中断时间限制,防止玩家被强制传送 。
(二)特殊效果
hairstyle 数值:可以改变玩家角色的头发类型。数值对应不同的发型样式,通过调整数值,玩家可以尝试不同的发型效果 。
haircolor 红值 绿值 蓝值:用于设定玩家角色头发的颜色。红值、绿值、蓝值的取值范围为 0 - 255,通过组合不同的 RGB 值,可以得到各种颜色。例如 haircolor 255 0 0,会将头发颜色设置为红色 。
close:用于关闭当前打开的对话框。当玩家完成与 NPC 的对话,或者某个操作完成后需要关闭对话框时,就可以使用这个命令 。
四、变量与常量相关命令
(一)变量定义与操作
变量在传奇脚本中用字母表示,名称只限于 P0 - P9、D0 - D9 等。例如 P0、D5 等都可以作为变量名 。
mov 变量赋值:用于给变量赋值。例如 MOV N0 1,就是将变量 N0 赋值为 1 。
inc 变量相加:让变量自动加上指定的数值。类似编程语言中的 x = x + n,例如 inc N0 5,会使变量 N0 的值在原有基础上增加 5 。
DEC 变量相减:与 inc 相反,是让变量减去指定的数值。如 DEC N0 3,会使变量 N0 的值减少 3 。
MUL 变量相乘:用于变量与指定数值相乘。例如 MUL N0 2,会将变量 N0 的值乘以 2;也支持 MUL N0 100 2 这种形式,即先将 N0 乘以 100,再乘以 2(注意不支持字符串变量) 。
DIV 整除变量:实现变量与指定数值的整除运算。例如 DIV N0 2,会将变量 N0 的值除以 2 并取整;同样支持 DIV N0 100 2 这种形式(不支持字符串变量) 。
sum 变量 A 变量 B:用于变量求和。使用时需要配合其他语句,例如 MOV 变量 X 0(给变量 X 赋初值 0),sum 变量 A 变量 B(X = A + B),sum 变量 C(X = X + C),最终程序中得到的 X 值为 A + B + C 。若只写 sum 变量 A 变量 B 这一句是无意义的,会导致错误 。
movr 变量 数值:定义一个随机变量,变量值范围是 “0 到数值”,但不包含数值本身。例如 movr S1 10,会给变量 S1 赋一个 0 到 9 之间的随机值 。
(二)变量测试
SMALL (变量) (数值):测试变量是否小于指定数值。如果变量小于指定数值,则返回结果为 1,否则为 0 。例如 SMALL (N0) 5,若 N0 的值小于 5,结果为 1,否则为 0 。
LARGE (变量) (数值):测试变量是否大于指定数值。变量大于指定数值时返回 1,否则为 0 。如 LARGE (N0) 10,当 N0 的值大于 10 时,结果为 1,否则为 0 。
EQUAL (变量) (数值):测试变量是否等于指定数值。变量等于指定数值时返回 1,否则为 0 。例如 EQUAL (N0) 3,若 N0 的值为 3,结果为 1,否则为 0 。
random 数值:用于生成一个随机概率判断。当生成的随机数等于数值时返回 1,否则为 0 。例如 random 1,概率为 100%(因为无论随机数是多少,总会有等于 1 的情况);random 2,概率为 50%(随机数有一半的可能性等于 2);random 4,概率为 25%(随机数有四分之一的可能性等于 4) 。
**<\(STR(变量)>**:用于在游戏中显示变量的值。通常用在#say后面,将变量值以文本形式展示给玩家。例如#say “你的等级是:<\)STR (D0)>”,如果 D0 存储的是玩家等级,那么玩家就会看到自己的等级显示在提示信息中 。
五、逻辑判断语句
(一)基本逻辑变量与设置
(n):n 为任何正整数,它是一个逻辑变量,有 0 值和 1 值,初始值为 0,并且是私人变量,即每个玩家都有自己独立的该变量。
#IF 条件 -- 执行:条件判断的开始标识,当条件成立时,执行 #ACT 后面的操作。例如 #IF checkitem 金币 500,#ACT take 金币 500,当玩家拥有 500 金币时,就会执行拿走 500 金币的操作 。
#ELSEACT 否定 -- 执行:与 #IF 配合使用,当 #IF 后的条件不成立时,执行 #ELSEACT 后面的操作。比如 #IF checklevel 30,#ACT mapmove 高级地图,#ELSEACT #say “你的等级不足 30,无法进入”,当玩家等级不足 30 时,就会显示 “你的等级不足 30,无法进入” 的提示 。
SET (n) 1:设置逻辑变量 (n) 为真,即将其值设为 1。例如在一个任务脚本中,当玩家完成某个步骤后,使用 SET (100) 1,将逻辑变量 100 设置为 1,用于后续的条件判断 。
Check (n) 1:测试逻辑变量 (n) 是否为真,即是否为 1。可以用于测试玩家是否完成了某个任务步骤等情况。比如在后续脚本中 #IF Check (100) 1,#ACT give 任务奖励,当逻辑变量 100 为 1 时,就会给玩家发放任务奖励 。
(二)其他条件判断
small 变量 数值:与 SMALL (变量) (数值) 类似,如果 “变量 < 数值” 则返回 1,否则为 0 。例如 small N0 8,当 N0 的值小于 8 时返回 1,否则为 0 。
large 变量 数值:如果 “变量> 数值” 则返回 1,否则为 0 。如 large N0 15,当 N0 的值大于 15 时返回 1,否则为 0 。
equal 变量 数值:如果 “变量 = 数值” 则返回 1,否则为 0 。例如 equal N0 10,当 N0 的值为 10 时返回 1,否则为 0 。
checkjob Warr(Wizard、Taos):用于测试玩家的职业。如果玩家职业是战士(Warr)、法师(Wizard)或道士(Taos)中的对应职业,则返回 1,否则为 0 。例如 checkjob Warr,当玩家是战士时返回 1,其他职业返回 0 。
checkgold 数值:检测玩家拥有的金币数量是否大于等于指定数值。若满足条件返回 1,否则为 0 。比如 checkgold 1000,当玩家金币数大于等于 1000 时返回 1,否则为 0 。
checklevel 数值:检测玩家的人物等级是否大于等于指定数值。满足条件返回 1,否则为 0 。如 checklevel 40,当玩家等级大于等于 40 时返回 1,否则为 0 。
checkitem 物品 数值:测试玩家拥有指定物品的数量是否达到指定数值。例如 checkitem 太阳水 10,当玩家拥有 10 个或更多太阳水时返回 1,否则为 0 。
genderman:测试玩家性别是否为男。如果是男性玩家则返回 1,否则为 0 。
CHECKBAGSIZE 数量:检测玩家背包的空格数量是否大于等于指定数量。例如 CHECKBAGSIZE 5,当背包空格数大于等于 5 时返回 1,否则为 0 。
checkpkpoint 数值:检测玩家的 PK 值是否大于指定数值。例如 checkpkpoint 10,当玩家 PK 值大于 10 时返回 1,否则为 0 。
CheckLuckPoint 数值:检测玩家的幸运值,通过检测符号(> <=)与指定数值进行比较。比如 CheckLuckPoint> 5,当玩家幸运值大于 5 时返回 1,否则为 0 。
checkmonmap 地图名 数值:检测指定地图上的怪物数量是否达到指定数值。例如 checkmonmap 新手村地图 50,当新手村地图上怪物数量达到或超过 50 时返回 1,否则为 0 。
checkduraeva 物品名 数值:测试具有品质的物品(如矿物等)的品质是否达到指定数值。例如 checkduraeva 金矿 80,当金矿品质达到或超过 80 时返回 1,否则为 0 。
checkhum 地图名 数值:测试指定地图上的玩家人数是否达到指定数值。例如 checkhum 沙巴克城 200,当沙巴克城玩家人数达到或超过 200 时返回 1,否则为 0 。
checkitemw 物品:检测玩家身上是否佩戴了指定物品。若佩戴则返回 1,否则为 0 。
takew 物品:直接从玩家身上回收指定物品,无需检测物品数量,只要玩家身上有该物品即可回收 。
checkmagicname 技能名称:检测玩家是否已经修炼了指定的技能。例如 checkmagicname 烈火剑法,当玩家修炼了烈火剑法技能时返回 1,否则为 0 。
这些传奇脚本命令涵盖了游戏中的各个方面,从基本的对话、物品管理,到复杂的逻辑判断和地图操作。通过合理运用这些命令,你可以创建出丰富多彩的游戏内容,无论是制作独特的任务、设计有趣的 NPC 交互,还是构建复杂的游戏系统,都能得心应手。希望这篇讲解能帮助你更好地理解和运用传奇脚本命令,在游戏开发和修改的道路上迈出坚实的步伐 。

