电脑端传奇NPC脚本从零写

来源: 作者: 点击:
传奇电脑端脚本本质就是纯文本 .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?

• 这命令我引擎命令表里搜得到吗?

• 扣的东西、给的东西、判断的变量,数据库里真存在吗?

三句都答上来,脚本基本一次红都不用看。