一、 脚本基础结构:IF-ACT 逻辑骨架
服务端脚本(NPC对话、任务、触发)均基于“条件判断→执行动作”的流程。核心语法如下:
[@Main] ; 段落标签,NPC对话入口
#IF ; 条件判断开始
CHECKLEVEL 35 ; 检测等级是否≥35
CHECKITEM 金条 1 ; 检测是否拥有1个金条
#ACT ; 条件满足时执行
TAKE 金条 1 ; 扣除物品
GIVE 裁决之杖 1 ; 给予物品
SENDMSG 0 兑换成功! ; 发送公告
#ELSEACT ; 条件不满足时执行
SENDMSG 0 等级不足或缺少金条!
关键规则:
• #IF 下只能放置检测类命令(CHECK系列),#ACT 下只能放置执行类命令(GIVE/TAKE等)。
• 命令与参数之间必须用空格分隔,严禁使用中文标点。
二、 高频命令分类速查表
1. 人物属性与检测命令
命令 参数示例 功能说明
CHECKLEVEL CHECKLEVEL 50 检测等级是否≥50
CHECKJOB CHECKJOB Warrior 检测职业(Warrior/Wizard/Taoist)
CHECKGOLD CHECKGOLD 1000000 检测金币是否≥100万
CHECKITEM CHECKITEM 回城卷 1 检测背包物品数量
CHECKBAGGAGE CHECKBAGGAGE 检测背包是否已满
2. 物品与货币操作命令
命令 参数示例 功能说明
GIVE GIVE 金币 1000 给予物品/金币
TAKE TAKE 屠龙 1 扣除物品
GAMEGOLD GAMEGOLD + 100 增加元宝(GOM/GEE引擎)
3. 地图传送与坐标移动
命令 参数示例 功能说明
MAP MAP 0 传送到0号地图随机坐标
MAPMOVE MAPMOVE 3 330 330 传送到指定地图坐标
TIMERECALL TIMERECALL 60 设置地图倒计时(60分钟)
4. 怪物刷怪与管理
命令 参数示例 功能说明
MONGEN MONGEN 白野猪 1 10 刷怪(名称 数量 刷新时间)
MONCLEAR MONCLEAR 0 清空指定地图所有怪物
5. 消息提示与界面
命令 参数示例 功能说明
SENDMSG SENDMSG 6 私人提示 发送个人提示(类型6)
SENDMSG SENDMSG 0 全服公告 全服滚动公告(类型0)
SENDCENTERMSG SENDCENTERMSG 0 居中大字 屏幕居中大字体公告
三、 变量操作:脚本逻辑的灵魂
变量用于记录玩家状态(如是否领取奖励),是编写复杂功能的基础。
1. 变量类型与赋值
• 个人数字变量:P0-P9(临时,仅当前脚本有效)
• 个人字符变量:S0-S99(永久保存),如 SET S10 已领取
• 全局数字变量:G0-G999(全服通用),如 SET G100 1
• 变量运算:INC P0 1(P0增加1),DEC P1 1(P1减少1)
2. 变量检测与显示
• 检测变量:CHECKVAR S10 = 已领取 或 SMALL G100 10(检测G100是否小于10)
• 显示变量:在NPC对话中使用 <$STR(S10)> 显示变量值
四、 实战案例:编写“每日签到”脚本
在 Market_Def 目录下创建 SignIn.txt,写入以下逻辑:
[@Main]
欢迎使用每日签到系统!\ \
<签到/@Sign> <离开/@Exit>
[@Sign]
#IF
CHECK [100] 0 ; 检测标志变量[100]是否为0(未签到)
#ACT
SET [100] 1 ; 设置已签到标志
GIVE 金币 500000
GAMEGOLD + 50
SENDMSG 0 玩家【<$USERNAME>】完成了每日签到!
#ELSEACT
SENDMSG 0 你今天已经签到过了!
此脚本利用 [100] 逻辑变量实现了防重复签到功能。
五、 脚本存放路径与重载
• NPC脚本:Mir200\Envir\Market_Def\(每个NPC一个.txt文件)
• 全局触发:Mir200\Envir\QFunction-0.txt(攻击、死亡、拾取事件)
• 重载方法:修改后需在M2Server点击“控制”→“重新加载”→“重读NPC脚本”,无需重启服务端。
六、 常见报错与排查
1. NPC对话空白:检查文件编码(需ANSI),确认 [@Main] 标签存在。
2. 条件不生效:确认 #IF 下的检测命令拼写正确(如 CHECKLEVEL 非 CHECKLEV)。
3. 变量混乱:不同NPC间尽量使用不同的变量编号(如S10、S11),避免冲突。
总结:掌握 #IF-#ACT 结构是脚本编写的基础,结合变量操作可实现复杂的游戏逻辑。建议先从修改现成脚本的参数开始练习,逐步过渡到独立编写功能。

