你现在的脚本问题出在checkpkpoint10这一行。它的意思是“PK值大于等于10”,不是“等于10”。PK值在传奇里是连续涨的,你杀到第10个人的瞬间,PK值变成10,触发一次;但你再杀一个人,PK值变成11,这时checkpkpoint10依然成立,因为11大于10,所以它又会触发一次,而且你#ELSEACT里也写了CHANGEPKPOINT+10,等于每次触发都额外加10点PK值,导致PK值越滚越大,永远卡不到“等于11”这个精确点上。
想改成杀到第11个人才触发,核心不是把10改成11就完事,而是要同时改两处:一是触发条件,二是触发后的动作,防止它重复触发或跳变。
先看你的逻辑漏洞:
1.#IF里checkpkpoint10,意思是PK值≥10就进#ACT,不是“正好10”。
2.#ACT里又CHANGEPKPOINT+10,等于触发一次后PK值直接再加10,变成20、30、40……永远跳不到11。
3.#ELSEACT里也写了CHANGEPKPOINT+10,等于不管走哪个分支,杀完人都加10点PK值,这个数值设计本身就很奇怪,正常杀人加1点或2点,你加10点,等于杀一个人顶十个人。
想改成“杀到第11个人触发”,正确的写法是这样:
[@KillPlay]
if
checkpkpoint10
ACT
CHANGEPKPOINT+1
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT+1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这里的关键改动是:
•checkpkpoint10保留,意思是“当PK值已经达到10时”触发这条分支。
•#ACT里把CHANGEPKPOINT+10改成CHANGEPKPOINT+1,因为杀人本身系统会加PK值,你这里再加1,正好从10变成11,触发“背11条人命”的公告。
•#ELSEACT里同样把+10改成+1,这样PK值从0到10之间,每杀一个人加1点,慢慢涨到10,然后触发分支,再加1变成11,公告出来。
但这里有个更深的坑:checkpkpoint10在PK值变成11之后依然成立,因为11≥10。所以如果你只在#ACT里发公告,那么杀第12个人、第13个人……每次都会再发一次“背11条人命”的公告,因为条件一直满足。你不想重复触发,就得加一个“只触发一次”的标记,或者把条件改成精确等于。
精确等于的写法用EQUAL或CHECKPKPOINT=10这种,但不同引擎语法不一样。常见引擎里checkpkpoint后面跟的是“大于等于”,不是“等于”。想精确到“正好11”触发,得用变量记录,比如:
[@KillPlay]
if
checkpkpoint10
check[001]0
ACT
CHANGEPKPOINT+1
MOVD01
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT+1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这里check[001]0是一个自定义开关,第一次触发时把它设成1,以后杀第12、13个人时,check[001]0不成立,就不会再进#ACT分支,公告只发一次。但注意,这个开关是永久的,除非你写脚本重置它,否则这个号一辈子只触发一次“背11条人命”。
如果你想每杀到11个人就触发一次,而不是一辈子只触发一次,那就不能用固定开关,得用“PK值等于11”的精确判断,或者用变量做减法。但传奇引擎里PK值本身是系统变量,不好直接做“等于”判断,常见做法是配合#IF里checkpkpoint10和checkpkpoint11两个条件连写,但引擎不支持这种区间判断。
最实用的做法是:用变量记录杀人次数,而不是直接用PK值。比如:
[@KillPlay]
IF
ACT
MOVD0<$PKPOINT>
INCD01
CHANGEPKPOINT+1
IF
EQUALD011
ACT
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这个逻辑是:先把当前PK值存进D0,加1,然后系统再加1点PK值,如果D0等于11,就发公告。但这里有个问题:PK值如果被其他系统改动过,比如吃药洗红、被杀掉PK值、行会技能减PK,那D0和实际杀人次数就对不上了。
真正稳妥的方案是单独建一个变量记录杀人次数,不用PK值。比如用变量P0:
[@KillPlay]
IF
ACT
INCP01
IF
EQUALP011
ACT
MOVP00
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这个写法里P0是自定义变量,每杀一个人加1,到11就归零并触发公告,然后重新计数。这样不管PK值被洗、被减、被加,都不影响“杀到11人触发”这个逻辑。但注意,P0是个人变量还是全局变量,要在脚本头部声明,不同引擎写法不同,有的用VARIntegerP0,有的用[@Login]里初始化。
你修改不成功的另一个常见原因是:脚本里#IF和#ACT之间不能有空行,不能有注释,不能有中文标点。你贴的代码里#SAY后面那些\和*>是排版用的,不影响逻辑,但#IF和#ACT之间如果有空格或空行,引擎会直接跳过这段脚本。检查一下你的原文件是不是在#IF和#ACT之间多了个空行,或者#ACT前面有全角空格。
还有一个坑:CHANGEPKPOINT+10这个命令本身,有的引擎是“增加PK值”,有的引擎是“设置PK值”。如果是“设置”,那#ACT里CHANGEPKPOINT+10会把PK值直接设成10,而不是加10。你原脚本里#IF判断checkpkpoint10,然后#ACT里CHANGEPKPOINT+10,如果引擎是“设置”,那杀完人PK值变成10,下次再杀人checkpkpoint10成立,又设置成10,永远卡在10,永远到不了11。这就是你改不成功的核心原因之一。
你需要在引擎帮助文档里查一下CHANGEPKPOINT的用法:
•如果是“增加”:CHANGEPKPOINT+1就是加1点。
•如果是“设置”:CHANGEPKPOINT10就是设成10,没有加减号。
如果是“设置”型,那你的脚本应该写成:
[@KillPlay]
if
checkpkpoint10
ACT
CHANGEPKPOINT11
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这个写法是:PK值小于10时,每次杀人设置成1(相当于重置);PK值达到10时,设置成11,触发公告。但这样有个问题:PK值永远只有0、1、11三个值,不会自然增长,看起来很奇怪,而且杀第12个人时checkpkpoint10依然成立,又会设置成11,公告重复发。
所以最推荐的还是用独立变量P0记录杀人次数,完全不碰PK值的判断。这样最干净,不受洗红、被杀、行会技能影响,也不会重复触发。
最后给你一个可以直接用的完整脚本,假设你的引擎支持VAR声明变量:
[@KillPlay]
IF
ACT
INCP01
IF
EQUALP011
ACT
MOVP00
CHANGEPKPOINT+1
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT+1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
如果你引擎不支持P0这种变量,就用引擎自带的“个人标志”或“自定义变量”系统,把P0替换成引擎支持的变量名。核心逻辑就一句话:杀人次数单独计数,到11触发公告并清零,别用PK值本身做精确判断。
想改成杀到第11个人才触发,核心不是把10改成11就完事,而是要同时改两处:一是触发条件,二是触发后的动作,防止它重复触发或跳变。
先看你的逻辑漏洞:
1.#IF里checkpkpoint10,意思是PK值≥10就进#ACT,不是“正好10”。
2.#ACT里又CHANGEPKPOINT+10,等于触发一次后PK值直接再加10,变成20、30、40……永远跳不到11。
3.#ELSEACT里也写了CHANGEPKPOINT+10,等于不管走哪个分支,杀完人都加10点PK值,这个数值设计本身就很奇怪,正常杀人加1点或2点,你加10点,等于杀一个人顶十个人。
想改成“杀到第11个人触发”,正确的写法是这样:
[@KillPlay]
if
checkpkpoint10
ACT
CHANGEPKPOINT+1
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT+1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这里的关键改动是:
•checkpkpoint10保留,意思是“当PK值已经达到10时”触发这条分支。
•#ACT里把CHANGEPKPOINT+10改成CHANGEPKPOINT+1,因为杀人本身系统会加PK值,你这里再加1,正好从10变成11,触发“背11条人命”的公告。
•#ELSEACT里同样把+10改成+1,这样PK值从0到10之间,每杀一个人加1点,慢慢涨到10,然后触发分支,再加1变成11,公告出来。
但这里有个更深的坑:checkpkpoint10在PK值变成11之后依然成立,因为11≥10。所以如果你只在#ACT里发公告,那么杀第12个人、第13个人……每次都会再发一次“背11条人命”的公告,因为条件一直满足。你不想重复触发,就得加一个“只触发一次”的标记,或者把条件改成精确等于。
精确等于的写法用EQUAL或CHECKPKPOINT=10这种,但不同引擎语法不一样。常见引擎里checkpkpoint后面跟的是“大于等于”,不是“等于”。想精确到“正好11”触发,得用变量记录,比如:
[@KillPlay]
if
checkpkpoint10
check[001]0
ACT
CHANGEPKPOINT+1
MOVD01
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT+1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这里check[001]0是一个自定义开关,第一次触发时把它设成1,以后杀第12、13个人时,check[001]0不成立,就不会再进#ACT分支,公告只发一次。但注意,这个开关是永久的,除非你写脚本重置它,否则这个号一辈子只触发一次“背11条人命”。
如果你想每杀到11个人就触发一次,而不是一辈子只触发一次,那就不能用固定开关,得用“PK值等于11”的精确判断,或者用变量做减法。但传奇引擎里PK值本身是系统变量,不好直接做“等于”判断,常见做法是配合#IF里checkpkpoint10和checkpkpoint11两个条件连写,但引擎不支持这种区间判断。
最实用的做法是:用变量记录杀人次数,而不是直接用PK值。比如:
[@KillPlay]
IF
ACT
MOVD0<$PKPOINT>
INCD01
CHANGEPKPOINT+1
IF
EQUALD011
ACT
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这个逻辑是:先把当前PK值存进D0,加1,然后系统再加1点PK值,如果D0等于11,就发公告。但这里有个问题:PK值如果被其他系统改动过,比如吃药洗红、被杀掉PK值、行会技能减PK,那D0和实际杀人次数就对不上了。
真正稳妥的方案是单独建一个变量记录杀人次数,不用PK值。比如用变量P0:
[@KillPlay]
IF
ACT
INCP01
IF
EQUALP011
ACT
MOVP00
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这个写法里P0是自定义变量,每杀一个人加1,到11就归零并触发公告,然后重新计数。这样不管PK值被洗、被减、被加,都不影响“杀到11人触发”这个逻辑。但注意,P0是个人变量还是全局变量,要在脚本头部声明,不同引擎写法不同,有的用VARIntegerP0,有的用[@Login]里初始化。
你修改不成功的另一个常见原因是:脚本里#IF和#ACT之间不能有空行,不能有注释,不能有中文标点。你贴的代码里#SAY后面那些\和*>是排版用的,不影响逻辑,但#IF和#ACT之间如果有空格或空行,引擎会直接跳过这段脚本。检查一下你的原文件是不是在#IF和#ACT之间多了个空行,或者#ACT前面有全角空格。
还有一个坑:CHANGEPKPOINT+10这个命令本身,有的引擎是“增加PK值”,有的引擎是“设置PK值”。如果是“设置”,那#ACT里CHANGEPKPOINT+10会把PK值直接设成10,而不是加10。你原脚本里#IF判断checkpkpoint10,然后#ACT里CHANGEPKPOINT+10,如果引擎是“设置”,那杀完人PK值变成10,下次再杀人checkpkpoint10成立,又设置成10,永远卡在10,永远到不了11。这就是你改不成功的核心原因之一。
你需要在引擎帮助文档里查一下CHANGEPKPOINT的用法:
•如果是“增加”:CHANGEPKPOINT+1就是加1点。
•如果是“设置”:CHANGEPKPOINT10就是设成10,没有加减号。
如果是“设置”型,那你的脚本应该写成:
[@KillPlay]
if
checkpkpoint10
ACT
CHANGEPKPOINT11
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
这个写法是:PK值小于10时,每次杀人设置成1(相当于重置);PK值达到10时,设置成11,触发公告。但这样有个问题:PK值永远只有0、1、11三个值,不会自然增长,看起来很奇怪,而且杀第12个人时checkpkpoint10依然成立,又会设置成11,公告重复发。
所以最推荐的还是用独立变量P0记录杀人次数,完全不碰PK值的判断。这样最干净,不受洗红、被杀、行会技能影响,也不会重复触发。
最后给你一个可以直接用的完整脚本,假设你的引擎支持VAR声明变量:
[@KillPlay]
IF
ACT
INCP01
IF
EQUALP011
ACT
MOVP00
CHANGEPKPOINT+1
SENDMSG1★凶手[%s]大开杀戒,现身背11条人命!大家小心!
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
ELSEACT
CHANGEPKPOINT+1
SAY
\\
*>\
*><※谋杀罪名成立※>\
【◆◆◆(O):::<==-\
*>您的PK值现在为:<$PKPOINT>点\
*>\\
<挺成功!/@exit>
如果你引擎不支持P0这种变量,就用引擎自带的“个人标志”或“自定义变量”系统,把P0替换成引擎支持的变量名。核心逻辑就一句话:杀人次数单独计数,到11触发公告并清零,别用PK值本身做精确判断。

