当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

电脑端传奇NPC脚本从零写

热度:
传奇电脑端脚本本质就是纯文本.txt,放在服务端Mir200\Envir里给M2解析。NPC功能放Market_Def,任务/活动放QuestDiary,登录/升级/杀怪/死亡等全局事件放QFunction-0.txt。用Notepad++写,编码用ANSI/GBK,别用记事本另存UTF-8BOM。

一、最小结构


[@main]
#SAY
我是传送员,选个地方去:\
<去比奇/@go_bichi><去盟重/@go_mengzhong>

[@go_bichi]
#if
checkgold1000
#act
take金币1000
mapmove0330330
sendmsg6已传送到比奇城
break
#elseact
messagebox金币不够1000,去不了


规则就三条:
•[@标签]是入口/跳转点,@main是点NPC第一个看的。

•#IF后面写条件,#ACT后面写动作,#ELSEACT是不满足条件时干的事。

•<显示文字/@标签>是玩家可点的按钮,点了就跳到对应段落。

二、常用条件命令(#IF段)

•checklevel>35等级大于35

•checkjobWarrior战士(Wizard法师/Taoist道士)

•checkitem金条1背包有1个金条

•checkgold1000金币≥1000

•checkgamegold>99元宝>99

•checkgamepoint>0绑定元宝/点券类

•checkbaggage背包满了

-random101/10概率(抽奖、爆率常用)

三、常用动作命令(#ACT段)

•give物品名数量给东西:give屠龙1

•take物品名数量扣东西:take金币1000

-gamegold+100加元宝(部分引擎GAMEGOLD+100)
•gamegold-100扣元宝

•changeexp+100000加经验

•mapmove地图号XY传送到坐标

•map地图号随机落点进图

•sendmsg6内容个人绿字提示

•sendmsg0内容全服公告

•messagebox内容弹窗

•close关NPC窗口

•break中断当前段,不再往下跑

•goto@标签跳段

四、让NPC在游戏里出现

光写脚本文件不够,还得在Envir\MerChant.txt里登记:

比奇城330330传送员080005

顺序大概是:地图名、X、Y、NPC名、方向、形象、功能码、是否沙城、是否移动、移动间隔。
然后Market_Def里建文件,文件名要和NPC对上,比如比奇城-传送员.txt。只登记不写脚本,点NPC没反应;只写脚本不登记,游戏里看不到人。

五、新手礼包NPC


[@main]
#SAY
找我领新手装备:\
<领战士包/@warrior><领法师包/@wizard><领道士包/@taoist>

[@warrior]
#if
#act
give青铜斧1
give布衣(男)1
give金创药(小量)5
sendmsg6战士新手包已发
close

[@wizard]
#if
#act
give海魂1
give布衣(女)1
give金创药(小量)5
sendmsg6法师新手包已发
close

[@taoist]
#if
#act
give桃木剑1
give布衣(男)1
give金创药(小量)5
sendmsg6道士新手包已发
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
random500
#act
give时乘六龙盔1
sendmsg0恭喜【%s】抽到时乘六龙盔!
goto@main
#elseact
sendmsg6没中,下次再来
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
sendmsg6任务完成,奖励已发
set[杀半兽人任务]1

具体标签名看引擎:有的用@OnKillMonster,有的用MapQuest.txt配触发,有的在QF里写。先翻你引擎的QuestCommandList.txt/EngineCommand.txt,搜命令存在再写,别背网上通用命令。

九、变量

•S0S1人物字符变量

•N0N1人物数字变量

•G0G1全服全局变量

写法:

MOVS0已领取
INCN11

有的引擎要先声明,有的直接用。翎风/GEE对变量作用域比老清风严,乱用就红。

十、调试顺序

1.M2控制台看红字:会带Market_Def\xxx.txt第N行。
2.行号对上:多半是命令拼错、中文标点、变量没声明、物品名和数据库不一致。
3.先写@main加一个按钮,点了只发sendmsg6测试,能发就说明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
checkgold1000
#act
take金币1000
mapmove71717
sendmsg6进石墓阵了
break
#elseact
messagebox金币不够

[@libao]
#if
#act
give金创药(小量)5
give随机传送卷2
sendmsg6新手包到手
close

[@chou]
#if
checkgamegold>199
#act
gamegold-200
#if
random200
#act
give裁决之杖1
sendmsg0【%s】抽到了裁决之杖!
goto@main
#elseact
sendmsg6没中
goto@main
#elseact
messagebox元宝不够200


电脑端传奇脚本不是“编程”,是“标签+条件+动作”的配置文件。先会@main、#IF、#ACT、give、take、mapmove、sendmsg这七个,就能做传送员、药店、礼包员、抽奖员、回收员;再往后才是随机、变量、任务链、全局触发、活动系统。

写之前先问三句:
•这功能在Market_Def还是QuestDiary?

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

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

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