传奇服务端脚本命令是控制游戏玩法、触发事件、设定规则的核心,分为基础语法命令与功能型命令,核心格式以“#”“@”为前缀,按“条件判断→执行动作→反馈提示”逻辑编写,以下是完整命令解析与实操说明。
一、脚本基础语法 必懂规则与格式
传奇服务端脚本语法简洁,核心分为前缀命令与语句结构,需牢记格式规则避免报错,基础要点如下:
1. 核心前缀标识
脚本命令按前缀分为两类,前缀决定命令作用,不可混淆使用:
- 以“#”开头:为语句命令,多用于条件判断、执行动作、提示输出,如#IF(条件判断)、#ACT(执行动作)、#SAY(文字提示);
- 以“@”开头:为触发命令或跳转命令,多用于触发事件、跳转脚本节点,如@goto(跳转指定语句)、@StdModeFunc(物品触发)。
2. 基础语句结构
脚本核心遵循“判断-执行-反馈”结构,基础框架如下,缺一不可:
#IF (条件判断:满足指定条件才执行后续动作)
条件参数 (如等级、职业、金币数量等)
#ACT (执行动作:满足条件后触发的操作)
执行命令 (如传送、发放道具、扣除金币等)
#SAY (文字反馈:向玩家显示提示信息)
提示内容 (如“操作成功!”“等级不足,无法执行”)
注:语句结尾无需添加分隔符,换行即可区分不同指令;跳转命令@goto可穿插使用,用于跳转到脚本内指定节点,格式为@goto 节点名称。
3. 变量与数据规则
脚本支持变量定义,变量类型与C语言一致,分为bool(布尔值)、int(整数)、double(小数),定义时需指定类型并初始化,如“int 等级变量=30”“bool 判定状态=1”。
全局变量可在所有函数中调用,定义在所有函数外部;局部变量仅能在所属函数内使用,需先定义再调用。变量赋值后可通过命令调用,用于动态判断或执行动作,如根据玩家等级变量发放对应奖励。
二、核心基础命令 必用且高频
以下为脚本编写中高频使用的基础命令,涵盖条件判断、执行动作、提示跳转三大类,附语法与用途说明:
1. 条件判断命令(#IF配套)
用于设定脚本执行的前提条件,仅当条件成立时,后续#ACT、#SAY命令才会触发,核心命令如下:
- checklevel 等级:判断玩家等级是否达到指定值,返回1为达标,0为不达标,语法示例“#IF checklevel 40”(判断玩家等级是否≥40级);
- checkjob 职业标识:判断玩家职业,职业标识对应为Warr(战士=1)、Wizard(法师=2)、Taos(道士=3),语法示例“#IF checkjob Warr”(判断玩家是否为战士);
- checkgold 金币数量:判断玩家背包金币是否满足指定数量,返回1为满足,0为不足,语法示例“#IF checkgold 10000”(判断玩家金币是否≥10000);
- checkmonster 地图名 怪物名 坐标变量1 坐标变量2:检测指定地图是否存在目标怪物,存在则返回真并获取怪物坐标,语法示例“#IF checkmonster 比奇城 鸡 X Y”(检测比奇城是否有鸡,并存取其坐标)。
2. 执行动作命令(#ACT配套)
用于触发具体游戏操作,如传送、道具操作、地图互动等,核心命令如下:
- mapmove 地图ID X坐标 Y坐标:将玩家传送至指定地图的对应坐标,地图ID为数字标识(如比奇城=0),语法示例“#ACT mapmove 0 327 272”(将玩家传送至比奇城327,272坐标);
- give 物品名称 数量:向玩家背包发放指定物品,语法示例“#ACT give 疗伤药 10”(发放10个疗伤药);
- take 物品名称 数量:从玩家背包扣除指定物品,需确保玩家背包有足够数量,语法示例“#ACT take 金币 5000”(扣除玩家5000金币);
- DRILLHOLE 参数1 参数2:在指定地图生成洞穴,参数1、2为自定义标识(不可为空),语法示例“#ACT DRILLHOLE 洞穴1 比奇”(在比奇城生成标识为“洞穴1”的洞穴)。
3. 提示与跳转命令
- #SAY 提示内容:向玩家弹出文字提示,无需添加定界符,语法示例“#SAY 等级达标,已发放奖励!”;
- @goto 节点名称:跳转到脚本内指定节点,节点需提前定义(如“@节点1”),语法示例“#ACT @goto 奖励发放完成”(跳转到“奖励发放完成”节点)。
三、功能型脚本命令 按场景分类
按游戏场景分为物品触发、地图事件、怪物掉落三类功能命令,针对性实现特定玩法,具体如下:
1. 物品触发命令(@StdModeFunc)
用于设定物品触发效果(如传送石、道具使用),需与数据库Anicount值对应,核心格式与示例:
命令格式:(@StdModeFunc 触发序号)
实操示例(比奇传送石):
(@StdModeFunc17) // 触发序号17,需与数据库传送石Anicount值一致
#IF 1 // 无条件触发
#ACT mapmove 0 327 272 // 传送至比奇安全区
#SAY 已传送至比奇城安全区!
注:触发序号需自定义且不重复,确保与数据库中对应物品的Anicount值一致,否则无法触发效果。
2. 地图事件触发命令
用于设定地图内的触发事件(如击杀怪物弹窗、掉落公告),核心逻辑与示例:
触发条件:当玩家在指定地图击杀目标怪物、掉落指定装备时,触发全服公告或文字提示,核心脚本片段:
#IF checkmonsterdie 祖玛教主 // 检测祖玛教主是否被击杀
#ACT sendmsg 2 全服公告:恭喜玩家XXX击杀祖玛教主! // 全服红字公告
#SAY 你成功击杀祖玛教主,获得丰厚奖励!
注:sendmsg 2 为全服红字公告,sendmsg 1 为玩家个人提示,可按需选择。
3. 怪物与掉落相关命令
- checkmonsterdie 怪物名:检测指定怪物是否被击杀,返回1为已击杀,0为未击杀,常用于设定击杀任务;
- drop 物品名称 掉落概率 数量:设定怪物掉落指定物品的概率与数量,语法示例“#ACT drop 祖玛头像 10 1”(设定怪物掉落祖玛头像的概率为10%,每次掉落1个)。
四、脚本编写实操示例 3个高频场景
结合上述命令,以下为3个常用场景的完整脚本示例,可直接套用或修改参数使用:
1. 等级达标领取奖励脚本
场景:玩家等级≥40级可领取奖励,每人限领1次
(@领取40级奖励) // 脚本触发节点
#IF checklevel 40 // 判断等级≥40级
checktask 40级奖励 0 // 检测是否未领取过奖励
#ACT give 圣战手镯 1 // 发放圣战手镯1个
give 金币 50000 // 发放50000金币
settask 40级奖励 1 // 标记为已领取
#SAY 恭喜领取40级奖励,祝你游戏愉快!
#ELSE // 条件不满足时
#SAY 等级不足40级,或已领取过奖励!
2. 职业专属传送脚本
场景:战士可传送至蜈蚣洞,法师至猪洞,道士至僵尸洞
(@职业专属传送) // 脚本触发节点
#IF checkjob Warr // 战士专属
#ACT mapmove 10 150 120 // 传送至蜈蚣洞
#SAY 战士专属传送,已抵达蜈蚣洞!
#IF checkjob Wizard // 法师专属
#ACT mapmove 15 200 180 // 传送至猪洞
#SAY 法师专属传送,已抵达猪洞!
#IF checkjob Taos // 道士专属
#ACT mapmove 5 180 150 // 传送至僵尸洞
#SAY 道士专属传送,已抵达僵尸洞!
3. 击杀怪物触发公告脚本
场景:玩家击杀沃玛教主后,触发全服红字公告
(@沃玛教主击杀触发) // 脚本触发节点
#IF checkmonsterdie 沃玛寺庙 沃玛教主 // 检测沃玛教主是否被击杀
#ACT sendmsg 2 恭喜玩家【%USERNAME%】击杀沃玛教主,掉落稀有装备! // 全服公告
#SAY 你成功击杀沃玛教主,全服玩家已知晓你的战绩!
五、常见脚本报错与解决方法
1. 脚本无响应,条件不触发
原因:条件命令参数错误(如职业标识写错、等级数值有误),或变量未初始化。解决方法:核对#IF后的条件参数,确保职业标识、地图名、怪物名与服务端数据一致;变量需先定义再调用,避免未初始化使用。
2. 物品触发脚本无效
原因:@StdModeFunc触发序号与数据库Anicount值不匹配,或序号重复。解决方法:打开DBC数据库,找到对应物品的Anicount字段,确保其数值与脚本触发序号一致,且序号无重复。
3. 传送命令报错,无法传送
原因:地图ID错误、坐标超出地图范围,或玩家处于战斗状态。解决方法:核对地图ID与坐标(可在服务端地图配置文件中查询),确保坐标在地图有效范围内;避免在战斗状态下触发传送脚本。
4. 公告命令不显示
原因:sendmsg参数错误,或服务端公告功能未开启。解决方法:确认sendmsg后参数为1(个人提示)或2(全服公告);打开引擎控制器,核对“公告设置”是否开启,确保参数配置正确。
总结
传奇服务端脚本命令核心在于“格式正确+参数匹配”,基础命令覆盖条件判断、执行动作、反馈提示,功能命令可针对性实现物品触发、地图事件等玩法。编写时遵循“#IF-#ACT-#SAY”结构,核对参数与服务端数据一致,即可避免大部分报错。新手可从高频基础命令入手,结合实操示例练习,逐步掌握复杂脚本的编写逻辑。

