传奇电脑端脚本本质就是纯文本 .txt,放在服务端 Mir200\Envir 里给 M2 解析。NPC 功能放 Market_Def,任务/活动放 QuestDiary,登录/升级/杀怪/死亡等全局事件放 QFunction-0.txt。用 Notepad++ 写,编码用 ANSI/GBK,别用记事本另存 UTF-8 BOM。
一、最小结构
[@main]
#SAY
我是传送员,选个地方去:\
<去比奇/@go_bichi> <去盟重/@go_mengzhong>
[@go_bichi]
#if
checkgold 1000
#act
take 金币 1000
mapmove 0 330 330
sendmsg 6 已传送到比奇城
break
#elseact
messagebox 金币不够1000,去不了
规则就三条:
• [@标签] 是入口/跳转点,@main 是点 NPC 第一个看的。
• #IF 后面写条件,#ACT 后面写动作,#ELSEACT 是不满足条件时干的事。
• <显示文字/@标签> 是玩家可点的按钮,点了就跳到对应段落。
二、常用条件命令(#IF 段)
• checklevel > 35 等级大于35
• checkjob Warrior 战士(Wizard 法师 / Taoist 道士)
• checkitem 金条 1 背包有1个金条
• checkgold 1000 金币 ≥1000
• checkgamegold > 99 元宝 >99
• checkgamepoint > 0 绑定元宝/点券类
• checkbaggage 背包满了
- random 10 1/10 概率(抽奖、爆率常用)
三、常用动作命令(#ACT 段)
• give 物品名 数量 给东西:give 屠龙 1
• take 物品名 数量 扣东西:take 金币 1000
- gamegold + 100 加元宝(部分引擎 GAMEGOLD + 100)
• gamegold - 100 扣元宝
• changeexp + 100000 加经验
• mapmove 地图号 X Y 传送到坐标
• map 地图号 随机落点进图
• sendmsg 6 内容 个人绿字提示
• sendmsg 0 内容 全服公告
• messagebox 内容 弹窗
• close 关 NPC 窗口
• break 中断当前段,不再往下跑
• goto @标签 跳段
四、让 NPC 在游戏里出现
光写脚本文件不够,还得在 Envir\MerChant.txt 里登记:
比奇城 330 330 传送员 0 8 0 0 0 5
顺序大概是:地图名、X、Y、NPC名、方向、形象、功能码、是否沙城、是否移动、移动间隔。
然后 Market_Def 里建文件,文件名要和 NPC 对上,比如 比奇城-传送员.txt。只登记不写脚本,点 NPC 没反应;只写脚本不登记,游戏里看不到人。
五、新手礼包 NPC
[@main]
#SAY
找我领新手装备:\
<领战士包/@warrior> <领法师包/@wizard> <领道士包/@taoist>
[@warrior]
#if
#act
give 青铜斧 1
give 布衣(男) 1
give 金创药(小量) 5
sendmsg 6 战士新手包已发
close
[@wizard]
#if
#act
give 海魂 1
give 布衣(女) 1
give 金创药(小量) 5
sendmsg 6 法师新手包已发
close
[@taoist]
#if
#act
give 桃木剑 1
give 布衣(男) 1
give 金创药(小量) 5
sendmsg 6 道士新手包已发
close
这段没条件,谁点都给。要限制就加:
#if
checklevel > 1
checkitem 新手礼包已领 0
#act
give ...
take 新手礼包已领 0
give 新手礼包已领 1
用“发过就给个标记物品”来防重复领,是最土但最稳的办法。
六、抽奖 NPC
[@main]
#SAY
200元宝抽一次:\
<抽奖/@choujiang>
[@choujiang]
#if
checkgamegold > 199
#act
gamegold - 200
#if
random 500
#act
give 时乘六龙盔 1
sendmsg 0 恭喜【%s】抽到时乘六龙盔!
goto @main
#elseact
sendmsg 6 没中,下次再来
goto @main
#elseact
messagebox 元宝不足200,抽不了
注意别用 Gmexecute 出来 xxx 这种二开私有命令,M2 不认就报“命令不正确或没有足够权限”,但后面的 sendmsg 还会发,就会出现“系统恭喜、包里没东西”。
七、全修 NPC
GOM/GEE 类引擎认 RepairAll:
[@main]
#SAY
花3元宝全身特修:\
<特修/@texiu>
[@texiu]
#if
checkgamegold > 2
#act
gamegold - 3
RepairAll
messagebox 修理成功
goto @main
#elseact
messagebox 元宝不足3个
引擎不认 RepairAll 就换 RepairItem 衣服 RepairItem 武器 这种逐部位写;NPC 本身得是能修理的 NPC,不然引擎拒绝执行。
八、任务脚本(QuestDiary)
比如杀10只半兽人领奖:
Envir\QuestDiary\新手任务\杀半兽人.txt
[@KillMon]
#if
checkmonkill 半兽人 10
#act
give 沃玛装备 1
sendmsg 6 任务完成,奖励已发
set [杀半兽人任务] 1
具体标签名看引擎:有的用 @OnKillMonster,有的用 MapQuest.txt 配触发,有的在 QF 里写。先翻你引擎的 QuestCommandList.txt / EngineCommand.txt,搜命令存在再写,别背网上通用命令。
九、变量
• S0 S1 人物字符变量
• N0 N1 人物数字变量
• G0 G1 全服全局变量
写法:
MOV S0 已领取
INC N1 1
有的引擎要先声明,有的直接用。翎风/GEE 对变量作用域比老清风严,乱用就红。
十、调试顺序
1. M2 控制台看红字:会带 Market_Def\xxx.txt 第 N 行。
2. 行号对上:多半是命令拼错、中文标点、变量没声明、物品名和数据库不一致。
3. 先写 @main 加一个按钮,点了只发 sendmsg 6 测试,能发就说明 NPC 挂上了。
4. 再加条件、再加扣钱、再加给物品。
5. 别一上来写抽奖+合成+转生+沙巴克,错一处全段崩。
十一、新手最容易踩的坑
• 记事本另存 UTF-8 → 中文命令全废
• <文字/@标签> 标签名和 [@标签] 对不上 → 点了没反应
• 物品名手打带空格 → 数据库里叫 时乘六龙盔,脚本写 时乘六龙 盔,永远给不出
• 金币和元宝搞反:checkgold 是金币,checkgamegold 才是元宝
• #IF 下写动作命令,#ACT 下写条件命令 → 引擎直接当未知行
• 用别家引擎命令:GOM 的 Give、BLUE 的 AddPlayerItem(...)、HXM2 的 AddItemToBag(...) 不是一回事
• NPC 没登记到 MerChant.txt → 游戏里根本没这个人
• 脚本热加载不生效 → 部分改动要 M2 里“重新加载脚本/NPC”或重启
十二、一个能直接抄的“传送+礼包+抽奖”合体
[@main]
#SAY
欢迎找我:\
<进石墓阵(1000金币)/@go_sg> \
<领新手包/@libao> \
<抽装备(200元宝)/@chou>
[@go_sg]
#if
checkgold 1000
#act
take 金币 1000
mapmove 7 17 17
sendmsg 6 进石墓阵了
break
#elseact
messagebox 金币不够
[@libao]
#if
#act
give 金创药(小量) 5
give 随机传送卷 2
sendmsg 6 新手包到手
close
[@chou]
#if
checkgamegold > 199
#act
gamegold - 200
#if
random 200
#act
give 裁决之杖 1
sendmsg 0 【%s】抽到了裁决之杖!
goto @main
#elseact
sendmsg 6 没中
goto @main
#elseact
messagebox 元宝不够200
电脑端传奇脚本不是“编程”,是“标签 + 条件 + 动作”的配置文件。先会 @main、#IF、#ACT、give、take、mapmove、sendmsg 这七个,就能做传送员、药店、礼包员、抽奖员、回收员;再往后才是随机、变量、任务链、全局触发、活动系统。
写之前先问三句:
• 这功能在 Market_Def 还是 QuestDiary?
• 这命令我引擎命令表里搜得到吗?
• 扣的东西、给的东西、判断的变量,数据库里真存在吗?
三句都答上来,脚本基本一次红都不用看。

