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

传奇杀怪数量提醒:KillMon计数与SENDMSG写法

热度:
杀怪提醒不是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才负责“记数”。
[顶部]