你提供的命令 <$STR(S0)>.pkpoint + 300 确实是错误的。在主流引擎(GOM/GEE/HERO)中,不存在直接对字符串变量执行 .pkpoint 的语法。正确的逻辑是使用 CHANGEPKPOINT 命令操作被攻击者的 PK 值。
一、脚本命令错误修正
错误命令分析:
<$STR(S0)>.pkpoint + 300
• 错误原因:<$STR(S0)> 是字符串变量(通常存储怪物或人物名称),引擎无法将其作为对象直接修改属性。pkpoint 也不是标准的属性修改指令。
- 引擎差异:部分极老引擎支持 INC <$STR(S0)> <$PKPOINT> 300 的写法,但现代引擎已废弃。
正确命令(GOM/GEE/HERO 通用):
#ACT
S0.CHANGEPKPOINT + 300
关键说明:
• S0:攻击触发脚本中的内置变量,代表被攻击目标(怪物/人物)。红名武器是砍中谁,就给谁加 PK 值,所以对象必须是 S0。
- CHANGEPKINT:标准的 PK 值修改命令,支持 +(增加)、-(减少)、=(设置)。
- 300:增加的 PK 点数。通常 100 点对应 1 点 PK 值(具体换算看 M2 设置),300 点足以让玩家瞬间红名。
二、红名武器完整配置流程
红名武器的核心原理是:利用地图攻击触发(HITMON)检测武器,命中后给目标增加巨额 PK 值。
1. 修改地图触发参数
打开 MirServer\Mir200\Envir\MapInfo.txt,找到需要生效的地图(通常是盟重安全区外),添加 HITMON 参数。
[3 盟重省] HITMON(@红名武器触发)
注意:若地图已有 HITMON(如经验猪脚本),不能重复添加,需将逻辑合并到同一个标签下。
2. 编写攻击触发脚本
打开 MirServer\Mir200\Envir\Market_Def\QFunction-0.txt,添加以下脚本:
[@红名武器触发]
#IF
CheckItemW 斩马刀 1 ; 检测攻击者是否手持“斩马刀”
CHECKHITMONNAME <$STR(S0)> ; 检测攻击目标 S0 是否存在
#ACT
S0.CHANGEPKPOINT + 300 ; 给被攻击者增加 300 PK点
SendCenterMsg 255 150 【<$STR(S0)>】被【<$USERNAME>】的红名斩马刀砍中,PK值暴涨! 1 5
Break
脚本逻辑详解:
• CheckItemW:检测攻击者背包或手上是否有指定武器(“斩马刀”需替换为你的武器数据库名称)。
- CHECKHITMONNAME:确认攻击目标是有效对象(防止砍空气触发)。
• SendCenterMsg:屏幕中央公告,增强效果(可选)。
3. 重载脚本生效
在 M2Server 中点击“管理” → “重新加载” → “NPC脚本”,使修改生效。无需重启服务端。
三、常见配置误区与排查
1. 地图未触发:确认 MapInfo.txt 中的地图编号正确,且 HITMON 参数后跟的标签名与 QFunction-0.txt 中的 [@] 标签完全一致。
2. PK 值不增加:
◦ 检查武器名称是否与数据库(StdItems.DB)中的 Name 字段完全一致(区分大小写和空格)。
- 确认 S0 对象正确。若想给攻击者自己加 PK(自残刀),需改为 CHANGEPKPOINT + 300(去掉 S0.)。
3. 引擎兼容性:
◦ GOM / GEE:完全支持上述 S0.CHANGEPKPOINT 语法。
◦ Blue / HERO:若报错,尝试改用 INC <$PKPOINT> 300(需配合变量检测)。
◦ LEGEND:部分版本需使用 KILLATTACKPKPOINT 命令。
四、高级功能:定时器持续红名
若想要“持有武器即持续增加周围玩家 PK 值”,需改用穿戴触发+定时器,但此方式消耗资源较大,需谨慎使用。
; 在 QFunction-0.txt 中
[@TakeOn1] ; 穿戴武器触发
#IF
CheckItemW 红名光环刀 1
#ACT
SetOnTimer 10 1 ; 开启10号定时器,每秒执行一次
Break
[@OnTimer10] ; 定时器执行段
#IF
CheckItemW 红名光环刀 1
#ACT
; 此处需用范围检测命令(如 GetRangeObject)获取周围玩家并循环增加 PK 值
; 命令较复杂,非新手向
Break
最终建议:直接使用“地图攻击触发 + S0.CHANGEPKPOINT”方案,稳定且易调试。修改脚本后务必重读 NPC 脚本,并在游戏内实测砍玩家或怪物验证 PK 值变化。

