古剑迷失传奇摆摊卡无敌机制解析:QFunction脚本触发与GOM漏洞实操

来源: 作者: 点击:
古剑迷失这类迷失版本里说的“摆摊卡无敌”,分两种情形:一种是 GM/服主在服务端脚本里给摆摊加了免疫伤害状态;另一种是版本脚本写漏了判定,被玩家利用弹窗时序在非安全区摆摊+大退,卡出脱离怪物伤害判定的状态。下面按实际文件位置和触发逻辑拆开说。

一、正常摆摊无敌的服务端实现(服主侧脚本)
迷失版多数基于 GOM / GEE / HERO 引擎,摆摊触发写在:
D:\MirServer\Mir200\Envir\Market_Def\QFunction-0.txt
核心标签是 [@ShopStall] 或 [@StartMyShop]、[@OnStallStart]。

1. GOM / GEE 引擎标准写法
[@ShopStall]
IF

INSAFEZONE
ELSEACT

MESSAGEBOX 需要在安全区才能摆摊
BREAK
IF

CHECKSHOPSTALLSTATUS
ACT

MESSAGEBOX 你是否确认要停止摆摊 @停止摆摊
ELSEACT

MESSAGEBOX 你是否确认要开始摆摊 @确定开始

[@确定开始]
IF

ISDUPMODE
SAY

请找一个空位置,不能与别人站在一起。
ACT

BREAK
IF

ACT

SHOPSTALL
ChangeModeEx 1 0
SENDMSG 6 摆摊期间进入无敌状态

[@停止摆摊]
IF

ACT

SHOPSTALL
ChangeModeEx 0
SENDMSG 6 摆摊取消,无敌解除

ChangeModeEx 1 0 含义:1=无敌标识,0=持续到取消摆摊或手动解除;若写 ChangeModeEx 1 300 就是仅300秒。

2. GEE 引擎替代命令
[@OnStallStart]
ACT

SetImmunity 1 0 0 0 0 0 0 0 0 0
SENDMSG 5 摆摊已开启,自动进入无敌状态
[@OnStallEnd]
ACT

SetImmunity 0 0 0 0 0 0 0 0 0 0
SENDMSG 5 摆摊已取消,无敌状态已解除

3. HERO 引擎写法
用 SetStatus 或 SETINVINCIBLE 1 开启,停止摆摊时 SETINVINCIBLE 0 关闭。

4. 地图层兜底
改 MapInfo.txt,给摆摊专图加:
[GA0 摆摊专用地图] SAFE NORECALL ALLOWUSEMYSHOP
进图即安全区,所有怪物不锁仇恨、不掉血,重启 M2 生效。

二、玩家侧“卡无敌”漏洞时序(古剑迷失常见脚本缺陷)
当 QFunction-0.txt 里的 [@ShopStall] 只做了 INSAFEZONE 判断,但确认摆摊的 MESSAGEBOX 和 SHOPSTALL 执行之间存在时序窗口,就能卡:

操作步骤:
1. 角色 A 站在安全区,点摆摊 → 弹出“你是否确认要开始摆摊 @确定开始”
2. 不要点确定,让角色 B 把 A 推出安全区(免 Shift 追杀或组队牵引,视版本判定)
3. A 在安全区外点“确定开始” → SHOPSTALL 执行成功,A 在非安全区进入摆摊
4. 直接大退客户端 → 再上线时部分 GOM 编译端会保留 OFFLINEPLAY / CHANGEMODE 2 1 的离线挂机标记,表现为非安全区也不被怪物打,即“卡无敌”
根源在脚本里这段:
[@PlayOffline]
IF

CHECKLEVELEX >1
ACT

MOVR P2 323 338
MOVR P3 324 339
MAPMOVE 3
CHANGEMODE 2 1
OFFLINEPLAY 1440
没在摆摊开始/结束处严格回滚 CHANGEMODE 和离线标记。

修复办法(服主):
• [@确定开始] 里再加一层 #IF INSAFEZONE #ELSEACT BREAK,确认框点下时也校验位置

• [@停止摆摊] 和角色下线触发里强制 CHANGEMODE 2 0、ChangeModeEx 0、OFFLINEPLAY 0

- M2 → 选项 → 人物状态 → 取消“摆摊继承离线模式”

三、古剑迷失玩家实操摆摊不卡的常规流程
1. 进土城/新手安全区,背包放非绑定装备、元宝足够
2. 快捷键或 NPC “个人商店” → 开始摆摊
3. 拖物品进摊位格,标价(元宝/金币按版本 StallPriceUnit)
4. 摆摊成功左上角出摊位名,此时若服务端写了 ChangeModeEx 1 0 就显示无敌保护
5. 离线摆摊时限到了或手动收摊 → 无敌自动清
非安全区点摆摊被拒提示“需要在安全区才能摆摊”属正常,不是 BUG。

四、常见异常对照
• 摆摊被小怪秒 → QFunction-0.txt 没写 ChangeModeEx / SetImmunity,或引擎命令不匹配(GOM 用 ChangeModeEx,HERO 用 SetStatus)

- 收摊后还能免伤 → 停止摆摊段漏了 ChangeModeEx 0,重启 M2 仍残留,需清人物状态变量
• 非安全区也能摆 + 大退无敌 → 上面时序漏洞,改脚本校验位置

• 摆摊按钮灰 → 地图没 ALLOWUSEMYSHOP、等级不够、背包绑定物未解绑

服务端改完 QFunction-0.txt 后,M2 控制台点“重载脚本”或重启 M2Server 生效;客户端无操作权限,纯玩家只能按服内规则走安全区摆摊。