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

