传奇服务端脚本命令如何用?从基础到常用的实用指南

来源: 作者: 点击:
传奇服务端的脚本命令,就像游戏世界的 “魔法咒语”,输入不同的指令,能让服务器做出各种反应 —— 比如让 NPC 说话、给玩家发奖励、传送地图等。对于想自己搭建私人服务器或修改玩法的人来说,了解这些命令的作用和用法很重要。下面就按功能分类,说说常用的脚本命令该怎么用,以及在什么场景下使用。
如何理解脚本命令的基本格式?
传奇脚本命令有固定的格式,就像写句子要主谓宾一样,大部分命令由 “指令 + 参数” 组成。比如 “Give 金币 1000”,“Give” 是指令(意思是 “给予”),“金币” 和 “1000” 是参数(代表给予的物品和数量)。
命令通常放在特定的标签下,最常见的是 “#act”(执行操作)和 “#say”(显示对话)。比如:
[@NPC 对话]
#say
欢迎来到比奇城!
#act
Give 金疮药 (小) 5 // 给玩家 5 瓶小金疮药
这里的 “@NPC 对话” 是触发标签(玩家点击 NPC 时触发),“#say” 后面跟着显示给玩家的文字,“#act” 后面跟着要执行的命令(给物品)。
另外,很多命令需要 “条件判断”,也就是用 “#if” 开头,满足条件才执行 “#act” 里的命令。比如:
#if
CheckLevel > 30 // 检查玩家等级是否大于 30 级
#act
MapMove 5 // 传送到地图 5
#elseact
MESSAGEBOX 等级不够,无法进入!
这种 “#if-#act-#elseact” 的结构,是脚本命令的核心逻辑,用来处理 “满足条件做 A,不满足做 B” 的场景。
如何使用物品相关的脚本命令?
物品相关的命令是最常用的,从给物品、扣物品到检查物品是否存在,都有对应的指令,新手可以先掌握这几个:
CheckItem:检查玩家是否有某物品及数量。比如 “CheckItem 屠龙刀 1”,意思是 “检查玩家是否有 1 把屠龙刀”,通常用在 “#if” 条件里,判断是否满足合成、任务等条件。
Give:给玩家物品。比如 “Give 雷霆战甲 1”,就是给玩家 1 件雷霆战甲。如果想给绑定物品,可以加参数 “Bind”,写成 “Give 雷霆战甲 1 Bind”。
Take:扣除玩家物品。比如 “Take 金币 5000”,扣除玩家 5000 金币,常用于购买物品、修理装备等场景。如果玩家物品不足,这个命令会执行失败,所以最好先搭配 “CheckItem” 检查。
CheckItemDur:检查物品耐久。比如 “CheckItemDur 武器 < 30”,检查武器耐久是否低于 30%,常用于自动修装备的脚本里。
RepairItem:修复物品。比如 “RepairItem 衣服 100”,把衣服修复到 100% 耐久,通常和 “CheckItemDur” 配合使用。
示例:玩家用 5 个沃玛碎片换 1 个赤月碎片的脚本:
#if
CheckItem 沃玛碎片 5 // 检查是否有 5 个沃玛碎片
#act
Take 沃玛碎片 5 // 扣除 5 个
Give 赤月碎片 1 // 给 1 个
SENDMSG 1 兑换成功!
#elseact
MESSAGEBOX 沃玛碎片不足 5 个,无法兑换。
如何使用地图和传送相关的命令?
地图和传送命令能控制玩家在不同地图间的移动,以及设置地图规则,常用的有这些:
MapMove:传送玩家到指定地图和坐标。格式是 “MapMove 地图号 X 坐标 Y 坐标”,比如 “MapMove 3 250 250”,把玩家传送到 3 号地图(沃玛寺庙)的 250,250 位置。
CheckMap:检查玩家当前所在地图。比如 “CheckMap 3”,判断玩家是否在 3 号地图,常用于限制 “只有在某地图才能接任务” 的场景。
SetMapAttr:设置地图属性。比如 “SetMapAttr 3 禁随机 = 1”,给 3 号地图添加 “禁止使用随机传送卷” 的属性,避免玩家在特定地图乱飞。
CheckMonsterCount:检查地图内怪物数量。比如 “CheckMonsterCount 3 沃玛卫士 0”,检查 3 号地图是否没有沃玛卫士,常用于 “清完怪才能进下一张图” 的脚本(前面提到过的场景)。
示例:玩家在比奇城(1 号地图)才能传送的脚本:
#if
CheckMap 1 // 检查是否在 1 号地图(比奇城)
#act
MapMove 4 300 300 // 传送到 4 号地图
#elseact
MESSAGEBOX 只有在比奇城才能使用此传送功能!
如何使用任务和变量相关的命令?
任务的核心是跟踪进度,这就需要变量和任务状态命令,常用的有:
SetVariable:给变量赋值。比如 “SetVariable g101 10”,把全局变量 g101 设为 10(可以代表任务进度、次数等)。
GetVariable:读取变量值。比如 “GetVariable g101”,获取 g101 的值,配合 “STR” 显示给玩家,如 “已完成次数:<$STR (g101)>”。
AddVariable:给变量增加数值。比如 “AddVariable g101 1”,让 g101 的值加 1,适合记录 “已杀怪数量”“已完成任务次数”。
CheckTaskDone:检查任务是否完成。比如 “CheckTaskDone 5”,判断 5 号任务是否完成,常用于后续奖励发放。
SetTask:设置任务状态。比如 “SetTask 5 1”,把 5 号任务状态设为 1(代表已完成),通常在玩家达成任务条件后执行。
示例:记录玩家杀怪数量的脚本:
#if
CheckMonster 沃玛卫士 1 // 检测到玩家杀死 1 只沃玛卫士
#act
AddVariable g200 1 // 变量 g200 加 1(记录杀怪数)
SENDMSG 1 已杀沃玛卫士:<$STR (g200)> 只
#if
GetVariable g200 >= 10 // 当杀怪数≥10 时
#act
SetTask 1 1 // 标记 1 号任务完成
SENDMSG 1 恭喜完成杀 10 只沃玛卫士的任务!
如何使用对话和提示相关的命令?
让 NPC 和玩家互动,以及给玩家发提示,需要这些命令:
#say:显示 NPC 对话内容,可以加选项让玩家点击。比如:
#say
你想做什么?
<接取任务 /@Task>
< 购买药水 /@Buy>
玩家点击 “<接取任务 /@Task>”,就会触发 “@Task” 标签下的脚本。
SENDMSG:给玩家发系统消息。格式是 “SENDMSG 频道号 内容”,比如 “SENDMSG 1 欢迎加入行会!”,“1” 代表全服频道(不同频道号对应不同范围,比如 2 是私聊)。
MESSAGEBOX:弹出提示框。比如 “MESSAGEBOX 背包已满,请先清理空间!”,强制玩家看到提示后才能继续操作。
CloseDialog:关闭对话窗口。比如玩家完成操作后,用 “CloseDialog” 关闭 NPC 对话界面。
示例:NPC 对话和提示的组合脚本:
[@NPC]
#say
我这里有药水卖,需要吗?
< 买金疮药 (小)/@BuySmall>
[@BuySmall]
#if
CheckGold 100 // 检查是否有 100 金币
#act
Take 金币 100
Give 金疮药 (小) 1
SENDMSG 1 购买成功!
CloseDialog // 关闭对话
#elseact
MESSAGEBOX 金币不足 100,无法购买。
如何处理命令使用中的常见问题?
命令用不起来,常见原因有三个:
格式错误:比如把 “MapMove” 写成 “MapMovee”,或者参数顺序错了(地图号和坐标写反)。解决方法是对照命令手册,检查拼写和参数顺序。
版本不兼容:不同私人服务器版本支持的命令可能不同,比如有的版本用 “FixItem” 代替 “RepairItem” 修复装备。可以在服务端的 “命令列表.txt” 里查当前版本支持的命令。
条件不满足:比如 “Take 金币 100” 执行失败,可能是玩家金币不够,这时候要在 “#if” 里加 “CheckGold 100” 提前判断,避免出错。
另外,复杂脚本可以拆成小部分测试,比如先测试 “CheckItem” 是否能正确判断物品,再测试 “Take” 和 “Give” 是否正常,一步步排除问题。
传奇服务端脚本命令虽然多,但核心是 “条件判断 + 执行操作”。刚开始不用记全,先掌握 “物品、地图、任务” 这三类常用命令,遇到具体场景再查手册。比如想做一个 “收集材料换装备” 的活动,就用 “CheckItem” 检查材料、“Take” 扣除、“Give” 给奖励,组合起来就能实现。多写几个简单脚本练习,慢慢就能熟练运用这些 “魔法咒语” 了。