传奇洗红脚本PK值检测与分支逻辑修复方案

来源: 作者: 点击:
脚本问题诊断与核心错误

当前脚本存在逻辑判断不完整和检测指令使用错误两大核心问题。首先,脚本缺少“PK值在300至1200之间”这一区间的处理,导致该区间的玩家无法触发任何选项。其次,脚本中的检测逻辑是“等于”检测,而非“大于/小于”检测。CHECKPKPOINT 12 是检测PK值是否等于1200,而非大于1200,这是脚本运行异常的直接原因。

问题一:PK值区间检测的正确写法

在传奇脚本中,实现“大于”或“小于”的检测,需要使用复合指令SMALL(小于)、LARGE(大于)、EQUAL(等于)配合变量检测,而不是仅用CHECKPKPOINT。

修正后NPC脚本头部逻辑:

<解除诅咒/@解除>
[@解除]
#IF
LARGE P88 1199
#Act
goto @yaoyuan
#SAY
<退出/@exit>
#IF
LARGE P88 299
SMALL P88 1200
#Act
goto @buyaoyuan
#SAY
<退出/@exit>
#ELSEACT
MESSAGEBox 您的PK值已低于300,无需清洗。


核心说明:
1. 变量设定:P88 是一个自定义的临时变量,需要在检测前先将玩家的PK值赋值给它。通常通过 #ACT 部分的 MOV 指令实现。
2. 完整检测:第一段检测PK值大于1199(即≥1200),第二段检测PK值大于299且小于1200(即300-1199)。#ELSEACT 处理PK值小于300的情况。

配套修改:完整的洗红流程脚本

必须将PK值先赋值给变量,再进行大小判断。以下是修改后的完整对话脚本示例,可放入NPC脚本文件中:

<解除诅咒/@解除>

[@解除]
#IF
#ACT
MOV P88 <$PKPOINT> ; 将当前PK值存入变量P88
#IF
LARGE P88 1199
#Act
goto @yaoyuan
#SAY
<退出/@exit>
#IF
LARGE P88 299
SMALL P88 1200
#Act
goto @buyaoyuan
#SAY
<退出/@exit>
#ELSEACT
MESSAGEBox 您的PK值(<$PKPOINT>点)已低于300,无需清洗。

[@yaoyuan]
#IF
CHECKGAMEGOLD > 999
#ACT
GAMEGOLD - 1000
CHANGEPKPOINT - 500
GMEXECUTE TestStatus 4 0
GuildNoticeMsg 9 72 ぐ【诅咒】:倒霉蛋“『<$USERNAME>』”终于解除了自己身上的诅咒.从此可以重新做人了!!
#SAY
已消耗1000元宝清洗500点PK值。\ \
<返回首页/@main>
#ELSESAY
元宝不足1000个,无法使用此服务。\ \
<退出/@exit>

[@buyaoyuan]
#IF
checkgold 1000000
#act
take 金币 1000000
CHANGEPKPOINT - 100
#SAY
已消耗100万金币清洗100点PK值。\ \
<返回首页/@main>
#ELSESAY
金币不足100万,无法使用此服务。\ \
<退出/@exit>


修改要点:
• 赋值变量:在 [@解除] 段落开头增加了 MOV P88 <$PKPOINT>,将实时PK值存入变量P88。

• 条件判定:使用 LARGE P88 1199 判断PK值大于1199;使用 LARGE P88 299 和 SMALL P88 1200 组合判断PK值在300-1199之间。

• 数值修正:原脚本中 CHANGEPKPOINT - 50000 数值过大,已根据上下文逻辑修正为 - 500,意为清洗500点。

与会员系统集成的实现思路

要实现“会员用金币,非会员用元宝”的差异化收费,需在原有检测逻辑中加入会员检测。

优化后的检测逻辑(头部):

[@解除]
#IF
#ACT
MOV P88 <$PKPOINT>
#IF
LARGE P88 1199
#ACT
goto @yaoyuan
#SAY
<退出/@exit>
#IF
LARGE P88 299
SMALL P88 1200
#ACT
goto @CheckMemberAndWash ; 新增:跳转到会员检测段
#SAY
<退出/@exit>
#ELSEACT
MESSAGEBox 您的PK值(<$PKPOINT>点)已低于300,无需清洗。

[@CheckMemberAndWash]
#IF
CHECKLEVELEX > 0 ; 或使用其他检测会员等级的指令,如CHECKMEMBERTYPE
#ACT
goto @MemberWash ; 会员跳转到金币清洗
#ELSEACT
goto @buyaoyuan ; 非会员跳转到原有逻辑


新增会员清洗段:

[@MemberWash]
#IF
checkgold 500000 ; 会员享受折扣,例如50万金币洗100点
#act
take 金币 500000
CHANGEPKPOINT - 100
#SAY
(会员特惠)已消耗50万金币清洗100点PK值。\ \
<返回首页/@main>
#ELSESAY
金币不足50万,无法使用此服务。\ \
<退出/@exit>


此方案确保了:PK值≥1200的玩家必须用元宝清洗([@yaoyuan]);PK值在300-1199的会员玩家可用优惠价金币清洗([@MemberWash]);PK值在300-1199的非会员玩家用原价金币清洗([@buyaoyuan]);PK值<300的玩家无需清洗。逻辑清晰,分支完整。