杀怪提醒不是NPC里写个“你杀了几个怪”就行,得靠引擎的杀怪触发标签把每次击杀接住,再给玩家变量加1,最后用SENDMSG把变量打出来。不同引擎触发名不一样:BLUE/LEG多在QFunction-0.txt用[@KillMon],GOM/GEE/996类也认[@KillMon],老版有的走MapQuest的[MonDie]。
BLUE/LEG引擎最直白写法
文件:Mir200\Envir\MapQuest_def\QFunction-0.txt
[@KillMon]
IF
ACT
INCN$杀怪总数1
SENDMSG6你又干掉一只怪,当前累计击杀:<STR(N杀怪总数)>只
BREAK
N$开头是BLUE的玩家私有字符/数字变量,INC就是加1。玩家每次砍死怪,QF的[@KillMon]自动跑一次,聊天框就弹“当前累计击杀:N只”。想只统计某张图:
[@KillMon]
IF
CHECKMAPNAME015
ACT
INCN$祖玛杀怪1
SENDMSG6祖玛寺庙击杀:<STR(N祖玛杀怪)>只
BREAK
CHECKMAPNAME后面跟地图号或地图名,看引擎版本。BLUE的[@KillMon]还能拿PARAM(0)怪物名、PARAM(1)地图编号、PARAM(2)地图名、PARAM(3)怪物等级,要喊“你杀了白野猪”就写:
SENDMSG6你击杀了<PARAM(0)>,累计:<STR(N$杀怪总数)>只
GOM/GEE/996写法
文件放QuestDiary\功能\杀怪计数.txt或QManage.txt里:
[@KillMon]
IF
ACT
INCU11
SENDMSG6击杀数+1,当前杀怪值:<$STR(U1)>
IF
EQUALU110
ACT
CHANGEEXP+1000000
SENDMSG0玩家[%s]累计杀10怪,奖励100万经验
MOVU10
BREAK
U系列是玩家私有可保存变量,INCU11就是击杀加一,EQUALU110用来做阶段奖励。
只提醒“每杀5只说一次”
[@KillMon]
IF
ACT
INCN$杀怪总数1
IF
CHECKLEVELEX>0
PERCENTVAL<STR(N杀怪总数)>5=0
ACT
SENDMSG6已击杀<STR(N杀怪总数)>只,继续冲!
BREAK
没PERCENTVAL命令的老引擎,就用取模思路或另开变量:
INCN$杀怪总数1
INCN$杀怪临时1
IF
LARGEN$杀怪临时4
ACT
SENDMSG6每5只提醒:已杀<STR(N杀怪总数)>只
MOVN$杀怪临时0
BREAK
按怪物种类统计
[@KillMon]
IF
CHECKMCNAME沃玛卫士
ACT
CALCVARHUMAN沃玛击杀数+1
SENDMSG6沃玛卫士击杀:<$.沃玛击杀数>只
BREAK
部分引擎用CalcVarHUMAN/SaveVarHUMAN:
[@KillMon]
IF
CHECKMCNAME沃玛卫士
ACT
CalcVarHUMAN沃玛击杀数+1
SaveVarHUMAN沃玛击杀数..\QuestDiary\数据\击杀记录.txt
IF
EQUAL100
ACT
GIVE沃玛号角1
SENDMSG0[%s]累计杀100只沃玛卫士,掉号角!
MOVHUMAN沃玛击杀数0
BREAK
NPC里查看当前杀了多少
Market_Def\杀怪统计.txt:
[@main]
你的击杀数据\
总击杀:<STR(N杀怪总数)>只\
祖玛击杀:<STR(N祖玛杀怪)>只\
沃玛击杀:<$.沃玛击杀数>只\
<清统计/@clear>\
<离开/@exit>\
[@clear]
IF
ACT
MOVN$杀怪总数0
MOVN$祖玛杀怪0
MOVHUMAN沃玛击杀数0
SENDMSG6击杀统计已清零
GOTO@main
每天零点重置
[@Login]或定时器里:
[@DayReset]
IF
ACT
MOVN$杀怪总数0
MOVN$祖玛杀怪0
MOVHUMAN沃玛击杀数0
SENDMSG6新的一天,击杀计数已重置
BREAK
更稳的是登录时比日期:
[@Login]
IF
NOTEQUALS昨天日期<DATE>
ACT
MOVN$今日杀怪0
MOVS昨天日期<DATE>
BREAK
常见不生效原因
•脚本写进NPC的[@main]里了,NPC不会自动知道你杀怪,必须放QFunction/QuestDiary的杀怪触发段。
•用了D0/P0这种临时变量,小退、掉线、切地图被冲掉,看起来“杀怪数不涨”,换N/U/HUMAN变量。
•宝宝杀怪没算:QF里要用KILLERTYPE判断,1=人物2=英雄3=宝宝,想连英雄宝宝一起算就别卡KILLERTYPE。
•地图参数没开杀怪触发:部分地图要在MapInfo里加KillFUNC或相关参数才会跑[@KillMon]。
•变量名带中文有的引擎吃,有的不吃,BLUE支持N$中文,GOM老版本更稳的是U1/U2、N1/N2。
•SENDMSG频道号乱填:6是玩家私聊式提示,0是全服,5是系统黄字,写错不是没杀,是发到别的频道你看不到。
最通用能抄的版本
QFunction-0.txt:
[@KillMon]
IF
ACT
INCN11
SENDMSG6击杀怪物+1,当前已杀:<$STR(N1)>只
IF
EQUALN150
ACT
CHANGEEXP+500000
SENDMSG6杀满50只,经验+50万
BREAK
IF
EQUALN1100
ACT
GIVE金币100000
SENDMSG0[%s]杀满100只怪物,全服广播发钱!
MOVN10
BREAK
N1是数字变量,<$STR(N1)>把数字转成文本显示;杀满50给经验,杀满100发全服公告并清零。想按地图、按怪名、按天数、按行会统计,都是在这个骨架上加#IF判断,不是换引擎命令。
怪物死的时候想喊“XXX被XXX杀了”
BLUE里:
[@KillMon]
ACT
SENDMSG5玩家[%s]在<%m>(<%x>:<%y>)击杀了<$PARAM(0)>
BREAK
%m当前地图,%x/%y坐标,%s玩家名,$PARAM(0)怪名。这样玩家边打边看聊天栏就知道“我又杀了几只、杀的啥”。
杀怪数存数据库别丢
BLUE:N$变量本身按玩家存。
GOM/GEE:U变量通常按账号/角色存,别用D/P。
要跨服/跨天保留就用SaveVarHUMAN/setplayvar存库,别用D0当长期计数。
副本“清完怪提醒”
配合地图怪物数:
[@KillMon]
IF
ACT
INCN$副本杀怪1
IF
CheckMapMonCount0880
ACT
SENDMSG6副本怪物已清空,可以找传送员出门
BREAK
CheckMapMonCount地图号0就是“该图怪数为0”,和杀怪计数一起用,玩家每杀一只看进度,清完弹提示,比纯NPC点一下真实得多。
一句话落点:杀怪提醒=杀怪触发标签+INC变量+SENDMSG打变量。NPC只负责“查数”,QF/QuestDiary才负责“记数”。
BLUE/LEG引擎最直白写法
文件:Mir200\Envir\MapQuest_def\QFunction-0.txt
[@KillMon]
IF
ACT
INCN$杀怪总数1
SENDMSG6你又干掉一只怪,当前累计击杀:<STR(N杀怪总数)>只
BREAK
N$开头是BLUE的玩家私有字符/数字变量,INC就是加1。玩家每次砍死怪,QF的[@KillMon]自动跑一次,聊天框就弹“当前累计击杀:N只”。想只统计某张图:
[@KillMon]
IF
CHECKMAPNAME015
ACT
INCN$祖玛杀怪1
SENDMSG6祖玛寺庙击杀:<STR(N祖玛杀怪)>只
BREAK
CHECKMAPNAME后面跟地图号或地图名,看引擎版本。BLUE的[@KillMon]还能拿PARAM(0)怪物名、PARAM(1)地图编号、PARAM(2)地图名、PARAM(3)怪物等级,要喊“你杀了白野猪”就写:
SENDMSG6你击杀了<PARAM(0)>,累计:<STR(N$杀怪总数)>只
GOM/GEE/996写法
文件放QuestDiary\功能\杀怪计数.txt或QManage.txt里:
[@KillMon]
IF
ACT
INCU11
SENDMSG6击杀数+1,当前杀怪值:<$STR(U1)>
IF
EQUALU110
ACT
CHANGEEXP+1000000
SENDMSG0玩家[%s]累计杀10怪,奖励100万经验
MOVU10
BREAK
U系列是玩家私有可保存变量,INCU11就是击杀加一,EQUALU110用来做阶段奖励。
只提醒“每杀5只说一次”
[@KillMon]
IF
ACT
INCN$杀怪总数1
IF
CHECKLEVELEX>0
PERCENTVAL<STR(N杀怪总数)>5=0
ACT
SENDMSG6已击杀<STR(N杀怪总数)>只,继续冲!
BREAK
没PERCENTVAL命令的老引擎,就用取模思路或另开变量:
INCN$杀怪总数1
INCN$杀怪临时1
IF
LARGEN$杀怪临时4
ACT
SENDMSG6每5只提醒:已杀<STR(N杀怪总数)>只
MOVN$杀怪临时0
BREAK
按怪物种类统计
[@KillMon]
IF
CHECKMCNAME沃玛卫士
ACT
CALCVARHUMAN沃玛击杀数+1
SENDMSG6沃玛卫士击杀:<$.沃玛击杀数>只
BREAK
部分引擎用CalcVarHUMAN/SaveVarHUMAN:
[@KillMon]
IF
CHECKMCNAME沃玛卫士
ACT
CalcVarHUMAN沃玛击杀数+1
SaveVarHUMAN沃玛击杀数..\QuestDiary\数据\击杀记录.txt
IF
EQUAL100
ACT
GIVE沃玛号角1
SENDMSG0[%s]累计杀100只沃玛卫士,掉号角!
MOVHUMAN沃玛击杀数0
BREAK
NPC里查看当前杀了多少
Market_Def\杀怪统计.txt:
[@main]
你的击杀数据\
总击杀:<STR(N杀怪总数)>只\
祖玛击杀:<STR(N祖玛杀怪)>只\
沃玛击杀:<$.沃玛击杀数>只\
<清统计/@clear>\
<离开/@exit>\
[@clear]
IF
ACT
MOVN$杀怪总数0
MOVN$祖玛杀怪0
MOVHUMAN沃玛击杀数0
SENDMSG6击杀统计已清零
GOTO@main
每天零点重置
[@Login]或定时器里:
[@DayReset]
IF
ACT
MOVN$杀怪总数0
MOVN$祖玛杀怪0
MOVHUMAN沃玛击杀数0
SENDMSG6新的一天,击杀计数已重置
BREAK
更稳的是登录时比日期:
[@Login]
IF
NOTEQUALS昨天日期<DATE>
ACT
MOVN$今日杀怪0
MOVS昨天日期<DATE>
BREAK
常见不生效原因
•脚本写进NPC的[@main]里了,NPC不会自动知道你杀怪,必须放QFunction/QuestDiary的杀怪触发段。
•用了D0/P0这种临时变量,小退、掉线、切地图被冲掉,看起来“杀怪数不涨”,换N/U/HUMAN变量。
•宝宝杀怪没算:QF里要用KILLERTYPE判断,1=人物2=英雄3=宝宝,想连英雄宝宝一起算就别卡KILLERTYPE。
•地图参数没开杀怪触发:部分地图要在MapInfo里加KillFUNC或相关参数才会跑[@KillMon]。
•变量名带中文有的引擎吃,有的不吃,BLUE支持N$中文,GOM老版本更稳的是U1/U2、N1/N2。
•SENDMSG频道号乱填:6是玩家私聊式提示,0是全服,5是系统黄字,写错不是没杀,是发到别的频道你看不到。
最通用能抄的版本
QFunction-0.txt:
[@KillMon]
IF
ACT
INCN11
SENDMSG6击杀怪物+1,当前已杀:<$STR(N1)>只
IF
EQUALN150
ACT
CHANGEEXP+500000
SENDMSG6杀满50只,经验+50万
BREAK
IF
EQUALN1100
ACT
GIVE金币100000
SENDMSG0[%s]杀满100只怪物,全服广播发钱!
MOVN10
BREAK
N1是数字变量,<$STR(N1)>把数字转成文本显示;杀满50给经验,杀满100发全服公告并清零。想按地图、按怪名、按天数、按行会统计,都是在这个骨架上加#IF判断,不是换引擎命令。
怪物死的时候想喊“XXX被XXX杀了”
BLUE里:
[@KillMon]
ACT
SENDMSG5玩家[%s]在<%m>(<%x>:<%y>)击杀了<$PARAM(0)>
BREAK
%m当前地图,%x/%y坐标,%s玩家名,$PARAM(0)怪名。这样玩家边打边看聊天栏就知道“我又杀了几只、杀的啥”。
杀怪数存数据库别丢
BLUE:N$变量本身按玩家存。
GOM/GEE:U变量通常按账号/角色存,别用D/P。
要跨服/跨天保留就用SaveVarHUMAN/setplayvar存库,别用D0当长期计数。
副本“清完怪提醒”
配合地图怪物数:
[@KillMon]
IF
ACT
INCN$副本杀怪1
IF
CheckMapMonCount0880
ACT
SENDMSG6副本怪物已清空,可以找传送员出门
BREAK
CheckMapMonCount地图号0就是“该图怪数为0”,和杀怪计数一起用,玩家每杀一只看进度,清完弹提示,比纯NPC点一下真实得多。
一句话落点:杀怪提醒=杀怪触发标签+INC变量+SENDMSG打变量。NPC只负责“查数”,QF/QuestDiary才负责“记数”。

