一、命令错误诊断:语法与对象双重失效
你提供的脚本片段 <$STR(S0)>.pkpoint + 300 存在根本性语法错误,引擎无法识别。主要问题如下:
1. 命令格式错误:传奇主流引擎(GEE/GOM/LEG等)调整PK值的标准命令是 CHANGEPKPOINT,而非 .pkpoint。pkpoint 通常是属性变量名,不能直接作为执行命令使用。
2. 对象引用错误:<$STR(S0)> 是字符串变量显示格式(类似<$USERNAME>),用于在对话框显示文本。在脚本执行段(#ACT)中,不能使用 <$STR(S0)> 作为对象前缀来操作角色属性。操作他人属性的正确前缀是 S0.(假设S0存储了对方名字)。
3. 运算符错误:即使命令正确,+ 300 的写法也不规范。标准格式应为 +300(无空格)或 + 300 作为参数整体。
正确命令示例:
; 给自己加PK值
#ACT
CHANGEPKPOINT + 300
; 给目标/变量对象加PK值
#ACT
S0.CHANGEPKPOINT + 300
二、红名武器标准配置流程(攻击触发)
“红名武器”通常指佩戴后攻击他人,能大幅增加对方PK值的武器。配置需修改 MapInfo.txt 和 QFunction-0.txt 文件。
1. 地图触发配置
编辑 MirServer\Mir200\Envir\MapInfo.txt,为允许PK的地图添加 HITMON 参数。
[3 盟重省] NORECONNECT(3) HITMON(@HITMON)
此行表示在盟重省地图攻击人物时,会触发 QFunction-0.txt 中的 [@HITMON] 段。
2. 攻击触发脚本(QF脚本)
在 MirServer\Mir200\Envir\Market_Def\QFunction-0.txt 中编写核心逻辑。
[@HITMON]
#IF
CheckItemW 红名之刃 1 ; 检测攻击者是否佩戴特定武器
Random 5 ; 50%触发几率(可根据需要调整)
#ACT
GetOppositeHumName S0 ; 获取被攻击者的名字存入S0
S0.CHANGEPKPOINT + 300 ; 给被攻击者增加300点PK值
SendMsg 6 【红名之刃】触发了诅咒效果,<$STR(S0)>的罪恶值大幅提升!
Break
关键点:
• GetOppositeHumName S0 是获取被攻击者名字的关键命令。
- S0.CHANGEPKPOINT + 300 是给对方加PK值的正确写法。
三、进阶:带安全区检测的防刷脚本
为防止在安全区恶意刷红名,需在脚本中加入安全区检测。
[@HITMON]
#IF
CheckItemW 红名之刃 1
#ACT
GetOppositeHumName S0
Mov P0 <$X> ; 记录攻击者坐标X
Mov P1 <$Y> ; 记录攻击者坐标Y
#IF
!CheckSamePos <$STR(S0)> <$STR(P0)> <$STR(P1)> ; 检测是否与攻击者同坐标(排除远程触发)
#ACT
Break ; 不同坐标(可能是远程技能),不触发红名效果
#IF
CheckInSafeZone <$STR(S0)> ; 检测对方是否在安全区
#ACT
Break ; 对方在安全区,不触发
#IF
Random 5 ; 通过上述检测后,再判断概率
#ACT
S0.CHANGEPKPOINT + 300
SendMsg 6 【红名之刃】触发了诅咒效果,<$STR(S0)>的罪恶值大幅提升!
Break
四、数据库标记与生效方法
1. 数据库设置:在 StdItems.DB 中,找到你的武器,确保 Shape(外观)和 AniCount(动作)字段设置正确,但这两个字段不直接影响红名逻辑。红名效果完全由上述脚本控制。
2. 脚本重载:修改脚本后,在游戏中GM输入 @重读QF 或 @ReloadQFunction 使脚本生效(无需重启服务器)。
3. 测试:佩戴武器攻击非安全区的玩家,观察对方PK值是否快速增加并变为红名。
总结:你的命令错误在于混淆了显示变量与执行命令。红名武器的核心是 HITMON 触发配合 S0.CHANGEPKPOINT 命令,而非直接修改数据库字段。

