传奇脚本本质是“事件驱动+条件分支+变量存储”的执行流,引擎在角色登录、杀怪、死亡、使用物品、点击NPC时触发对应标签,按“检测→执行→跳转/终止”的顺序逐行解析,所有逻辑围绕Market_Def(NPC对话)、QuestDiary(任务流程)、MapQuest_def(全局/地图事件)三个目录展开。
一、脚本执行优先级与触发入口
引擎加载顺序决定执行先后:先跑QManage.txt(登录/全局管理),再跑QFunction.txt(地图/行为触发),最后加载Market_Def下的NPC脚本。触发标签分三类:
•系统固定标签:[@Login](登录)、[@KillMonster](杀怪)、[@PlayDie](死亡)、[@GetItem](捡物)、[@UseItem_物品名](使用物品)、[@SpeedClose](加速断线),名字不可改,写在对应文件内自动生效。
•NPC标签:以NPC文件名或脚本内定义的[@段名]为入口,如[@老兵]、[@兑换使者],点击NPC时引擎匹配文件名或脚本内标签调用。
•自定义触发:通过脚本内#CALL命令跳转至其他文件的[@段名],实现模块化调用,如#CALL[\QuestDiary\日常\押镖.txt]@开始押镖。
二、核心逻辑结构:条件分支与流程控制
脚本执行以“行”为单位,自上而下,遇控制命令跳转。基础结构为“标签→检测→执行→跳转/终止”:
[@段名]
IF
检测命令1
检测命令2
ACT
执行命令1
执行命令2
ELSEACT
执行命令3
BREAK
•#IF后可接多个检测命令,需全部为真才执行#ACT块;任意一条为假则跳转至#ELSEACT(若存在)。
•GOTO@段名强制跳转至指定标签,常用于循环或流程分支;BREAK终止当前脚本执行,防止穿透至下一段;CLOSE关闭NPC对话框。
•多分支用#ELSEIF嵌套,如:
IF
CHECKLEVEL>50
ACT
GIVE高级装备1
ELSEIF
CHECKLEVEL>30
ACT
GIVE中级装备1
ELSEACT
GIVE初级装备1
BREAK
三、变量体系:数据存取的底层逻辑
变量是脚本逻辑的核心,按作用域和存储方式分为五类:
•临时变量(P0-P9、S0-S9):仅当前脚本对话有效,小退或关闭NPC后清空,用于临时计算,如P0记录当前兑换数量。
•个人持久变量(D0-D9、N变量名):绑定角色账号,存盘后永久有效,用于任务进度、杀怪计数、充值记录,如N杀怪计数记录累计杀怪数,重启服务器不丢失。
•全局变量(G0-G9):全服共享,用于活动开关、全服计数,如G0控制“双倍经验活动”是否开启(1为开,0为关)。
•字符串变量(S、N):存储文本,如N$玩家昵称记录角色名,用于对话显示或条件判断。
•标志位(ONOFF):通过SETONOFF命令设置,共1000个(0-999),用于复杂任务状态锁,如SETONOFF1011标记“已完成新手任务第一步”。
变量操作命令:MOV(赋值,MOVD0100)、INC(自增,INCD01)、DEC(自减,DECD01)、SUM(求和,SUMD0D1即D0=D0+D1)、MOVR(随机数,MOVRD05给D0赋0-4)、CALC(四则运算,CALCG10=G10+1)、CHECKVAR(检测变量,CHECKVARD0100判断D0是否等于100)。
四、检测命令:条件判断的底层规则
检测命令写在#IF后,用于判断角色状态、物品、地图、时间等条件,核心逻辑是“返回真/假”:
•角色属性:CHECKLEVEL(等级,CHECKLEVEL>35)、CHECKGOLD(金币)、CHECKGAMEGOLD(元宝)、CHECKEXP(经验)、CHECKPKPOINT(PK值)、CHECKJOB(职业,CHECKJOBWarrior战士)、CHECKGENDER(性别,CHECKGENDER0男)。
•物品检测:CHECKITEM(背包物品,CHECKITEM金矿5)、CHECKITEMW(穿戴装备,CHECKITEMW屠龙)、CHECKDURA(持久,CHECKDURA屠龙10持久大于10)、CHECKBAGSIZE(背包空位,CHECKBAGSIZE3至少3格空位)。
•地图与环境:ISONMAP(当前地图,ISONMAP0比奇)、CHECKHUM(地图人数,CHECKHUM050比奇在线50人)、CHECKTIME(时间,CHECKTIME18022018点-22点)、CHECKDAYOFWEEK(星期,CHECKDAYOFWEEK6周六)。
•概率与随机:RANDOM(概率,RANDOM520%概率)、MOVR(随机数,配合变量使用)。
•变量检测:CHECKVAR(变量值)、CHECKONOFF(标志位,CHECKONOFF1011判断标志位101是否为1)。
五、执行命令:动作触发的实现方式
执行命令写在#ACT后,用于修改角色属性、物品、地图状态、发送消息等:
•物品与金钱:GIVE(给予,GIVE金条1)、TAKE(扣除,TAKE金矿5)、TAKEW(按序列号删物品)、TAKEB(脱装备,TAKEBALL脱全身)、GAMEGOLD(元宝,GAMEGOLD+500)、GOLD(金币,GOLD+1000000)、MAKE(脚下生成物品,MAKE金币10)。
•属性修改:CHANGEEXP(经验,CHANGEEXP+10000)、CHANGELEVEL(等级,CHANGELEVEL+1)、CHANGEPKPOINT(PK值,CHANGEPKPOINT-100)、SETHEALTH(生命上限)、SETPOW(攻击)、SETMAGIC(魔法)、CHANGEJOB(转职,CHANGEJOB1法师)、CHANGEGENDER(变性,CHANGEGENDER1女)。
•地图与怪物:MAPMOVE(定点传送,MAPMOVE0330330比奇安全区)、MAP(随机传地图,MAP3盟重)、MONCLEAR(清图怪,MONCLEAR0比奇)、MONGEN(刷怪,MONGEN祖玛卫士1010330330比奇坐标刷10只,10分钟刷新)。
•消息发送:SENDMSG(消息,SENDMSG5欢迎光临个人绿字;SENDMSG0全服公告全服黄字)、MESSAGEBOX(弹窗,MESSAGEBOX任务完成)、#BROADCAST(全服广播,#BROADCAST服务器重启倒计时5分钟)。
•流程控制:GOTO(跳转)、BREAK(终止)、CLOSE(关对话框)、#CALL(调用子程序,#CALL[\QuestDiary\活动\攻城.txt]@开始攻城)。
六、实战逻辑案例:杀怪计数领奖
需求:杀100只祖玛卫士,领屠龙刀,每日重置。
实现(QFunction-0.txt):
[@KillMonster]
IF
EQUALN$怪物名祖玛卫士
ACT
INCN$杀怪计数1
IF
EQUALN$杀怪计数100
ACT
SENDMSG5杀满100只祖玛卫士,获得屠龙刀!
GIVE屠龙1
MOVN$杀怪计数0
ELSEACT
SENDMSG6已杀祖玛卫士:<STR(N杀怪计数)>/100
BREAK
(每日重置需在QManage.txt的[@Login]或定时脚本中加MOVN$杀怪计数0)
七、脚本调试与常见错误
•编码错误:脚本文件需存为ANSI编码,UTF8会导致中文乱码、命令不识别。
•变量作用域错误:临时变量P0在NPC对话结束后清空,需持久存储用D0或N$。
•标签重复:同一文件内标签名不可重复,否则引擎加载时覆盖。
•命令参数错误:物品名需与StdItems.DB完全一致(含空格需用引号,如"沃玛号角"),MAPMOVE坐标需在地图范围内。
•逻辑穿透:#IF块后未加BREAK,导致条件不成立时继续执行下一段#ACT。
•触发失效:系统标签名拼写错误(如[@KillMon]写成[@Killmon]),或文件放错目录(QFunction脚本需放MapQuest_def下)。
八、模块化脚本设计
大型服需将脚本拆分:基础功能(如兑换、传送)放Market_Def,任务流程放QuestDiary\任务,活动逻辑放QuestDiary\活动,全局触发放MapQuest_def,通过#CALL调用公共模块(如[\QuestDiary\公共\变量重置.txt]@每日重置),避免代码冗余,便于维护。
脚本逻辑的核心是“触发→检测→执行→存储”的闭环,变量是连接各模块的纽带,条件分支决定流程走向,执行命令实现功能落地。理解引擎解析顺序(QManage→QFunction→NPC)、变量作用域(临时/持久/全局)、命令参数规则(物品名、坐标、数值),即可构建从简单兑换到复杂攻城、任务链的全套脚本逻辑。
一、脚本执行优先级与触发入口
引擎加载顺序决定执行先后:先跑QManage.txt(登录/全局管理),再跑QFunction.txt(地图/行为触发),最后加载Market_Def下的NPC脚本。触发标签分三类:
•系统固定标签:[@Login](登录)、[@KillMonster](杀怪)、[@PlayDie](死亡)、[@GetItem](捡物)、[@UseItem_物品名](使用物品)、[@SpeedClose](加速断线),名字不可改,写在对应文件内自动生效。
•NPC标签:以NPC文件名或脚本内定义的[@段名]为入口,如[@老兵]、[@兑换使者],点击NPC时引擎匹配文件名或脚本内标签调用。
•自定义触发:通过脚本内#CALL命令跳转至其他文件的[@段名],实现模块化调用,如#CALL[\QuestDiary\日常\押镖.txt]@开始押镖。
二、核心逻辑结构:条件分支与流程控制
脚本执行以“行”为单位,自上而下,遇控制命令跳转。基础结构为“标签→检测→执行→跳转/终止”:
[@段名]
IF
检测命令1
检测命令2
ACT
执行命令1
执行命令2
ELSEACT
执行命令3
BREAK
•#IF后可接多个检测命令,需全部为真才执行#ACT块;任意一条为假则跳转至#ELSEACT(若存在)。
•GOTO@段名强制跳转至指定标签,常用于循环或流程分支;BREAK终止当前脚本执行,防止穿透至下一段;CLOSE关闭NPC对话框。
•多分支用#ELSEIF嵌套,如:
IF
CHECKLEVEL>50
ACT
GIVE高级装备1
ELSEIF
CHECKLEVEL>30
ACT
GIVE中级装备1
ELSEACT
GIVE初级装备1
BREAK
三、变量体系:数据存取的底层逻辑
变量是脚本逻辑的核心,按作用域和存储方式分为五类:
•临时变量(P0-P9、S0-S9):仅当前脚本对话有效,小退或关闭NPC后清空,用于临时计算,如P0记录当前兑换数量。
•个人持久变量(D0-D9、N变量名):绑定角色账号,存盘后永久有效,用于任务进度、杀怪计数、充值记录,如N杀怪计数记录累计杀怪数,重启服务器不丢失。
•全局变量(G0-G9):全服共享,用于活动开关、全服计数,如G0控制“双倍经验活动”是否开启(1为开,0为关)。
•字符串变量(S、N):存储文本,如N$玩家昵称记录角色名,用于对话显示或条件判断。
•标志位(ONOFF):通过SETONOFF命令设置,共1000个(0-999),用于复杂任务状态锁,如SETONOFF1011标记“已完成新手任务第一步”。
变量操作命令:MOV(赋值,MOVD0100)、INC(自增,INCD01)、DEC(自减,DECD01)、SUM(求和,SUMD0D1即D0=D0+D1)、MOVR(随机数,MOVRD05给D0赋0-4)、CALC(四则运算,CALCG10=G10+1)、CHECKVAR(检测变量,CHECKVARD0100判断D0是否等于100)。
四、检测命令:条件判断的底层规则
检测命令写在#IF后,用于判断角色状态、物品、地图、时间等条件,核心逻辑是“返回真/假”:
•角色属性:CHECKLEVEL(等级,CHECKLEVEL>35)、CHECKGOLD(金币)、CHECKGAMEGOLD(元宝)、CHECKEXP(经验)、CHECKPKPOINT(PK值)、CHECKJOB(职业,CHECKJOBWarrior战士)、CHECKGENDER(性别,CHECKGENDER0男)。
•物品检测:CHECKITEM(背包物品,CHECKITEM金矿5)、CHECKITEMW(穿戴装备,CHECKITEMW屠龙)、CHECKDURA(持久,CHECKDURA屠龙10持久大于10)、CHECKBAGSIZE(背包空位,CHECKBAGSIZE3至少3格空位)。
•地图与环境:ISONMAP(当前地图,ISONMAP0比奇)、CHECKHUM(地图人数,CHECKHUM050比奇在线50人)、CHECKTIME(时间,CHECKTIME18022018点-22点)、CHECKDAYOFWEEK(星期,CHECKDAYOFWEEK6周六)。
•概率与随机:RANDOM(概率,RANDOM520%概率)、MOVR(随机数,配合变量使用)。
•变量检测:CHECKVAR(变量值)、CHECKONOFF(标志位,CHECKONOFF1011判断标志位101是否为1)。
五、执行命令:动作触发的实现方式
执行命令写在#ACT后,用于修改角色属性、物品、地图状态、发送消息等:
•物品与金钱:GIVE(给予,GIVE金条1)、TAKE(扣除,TAKE金矿5)、TAKEW(按序列号删物品)、TAKEB(脱装备,TAKEBALL脱全身)、GAMEGOLD(元宝,GAMEGOLD+500)、GOLD(金币,GOLD+1000000)、MAKE(脚下生成物品,MAKE金币10)。
•属性修改:CHANGEEXP(经验,CHANGEEXP+10000)、CHANGELEVEL(等级,CHANGELEVEL+1)、CHANGEPKPOINT(PK值,CHANGEPKPOINT-100)、SETHEALTH(生命上限)、SETPOW(攻击)、SETMAGIC(魔法)、CHANGEJOB(转职,CHANGEJOB1法师)、CHANGEGENDER(变性,CHANGEGENDER1女)。
•地图与怪物:MAPMOVE(定点传送,MAPMOVE0330330比奇安全区)、MAP(随机传地图,MAP3盟重)、MONCLEAR(清图怪,MONCLEAR0比奇)、MONGEN(刷怪,MONGEN祖玛卫士1010330330比奇坐标刷10只,10分钟刷新)。
•消息发送:SENDMSG(消息,SENDMSG5欢迎光临个人绿字;SENDMSG0全服公告全服黄字)、MESSAGEBOX(弹窗,MESSAGEBOX任务完成)、#BROADCAST(全服广播,#BROADCAST服务器重启倒计时5分钟)。
•流程控制:GOTO(跳转)、BREAK(终止)、CLOSE(关对话框)、#CALL(调用子程序,#CALL[\QuestDiary\活动\攻城.txt]@开始攻城)。
六、实战逻辑案例:杀怪计数领奖
需求:杀100只祖玛卫士,领屠龙刀,每日重置。
实现(QFunction-0.txt):
[@KillMonster]
IF
EQUALN$怪物名祖玛卫士
ACT
INCN$杀怪计数1
IF
EQUALN$杀怪计数100
ACT
SENDMSG5杀满100只祖玛卫士,获得屠龙刀!
GIVE屠龙1
MOVN$杀怪计数0
ELSEACT
SENDMSG6已杀祖玛卫士:<STR(N杀怪计数)>/100
BREAK
(每日重置需在QManage.txt的[@Login]或定时脚本中加MOVN$杀怪计数0)
七、脚本调试与常见错误
•编码错误:脚本文件需存为ANSI编码,UTF8会导致中文乱码、命令不识别。
•变量作用域错误:临时变量P0在NPC对话结束后清空,需持久存储用D0或N$。
•标签重复:同一文件内标签名不可重复,否则引擎加载时覆盖。
•命令参数错误:物品名需与StdItems.DB完全一致(含空格需用引号,如"沃玛号角"),MAPMOVE坐标需在地图范围内。
•逻辑穿透:#IF块后未加BREAK,导致条件不成立时继续执行下一段#ACT。
•触发失效:系统标签名拼写错误(如[@KillMon]写成[@Killmon]),或文件放错目录(QFunction脚本需放MapQuest_def下)。
八、模块化脚本设计
大型服需将脚本拆分:基础功能(如兑换、传送)放Market_Def,任务流程放QuestDiary\任务,活动逻辑放QuestDiary\活动,全局触发放MapQuest_def,通过#CALL调用公共模块(如[\QuestDiary\公共\变量重置.txt]@每日重置),避免代码冗余,便于维护。
脚本逻辑的核心是“触发→检测→执行→存储”的闭环,变量是连接各模块的纽带,条件分支决定流程走向,执行命令实现功能落地。理解引擎解析顺序(QManage→QFunction→NPC)、变量作用域(临时/持久/全局)、命令参数规则(物品名、坐标、数值),即可构建从简单兑换到复杂攻城、任务链的全套脚本逻辑。

