传奇抽奖脚本报“此命令不正确”但系统又恭喜的原因

来源: 作者: 点击:
先看现象:点 NPC 弹“此命令不正确,或没有足够的权限”,紧接着系统又发“恭喜 XXX 获得物品”,但背包里没有东西。这不是抽奖逻辑抽风,是脚本里那行 Gmexecute 出来 用错了地方。

一、问题出在哪一行

看你这脚本:

Gmexecute 出来 时乘六龙ゞ盔 Self


Gmexecute 是“让 M2 执行一条 GM 命令”的引擎函数。出来 不是标准 GM 命令,它是某些版本里“刷物品到指定角色身上”的私有命令(常见于 GOM/GEE 二开服,命令名可能是 出来、刷、@MakeItem、@GiveItem、@AddItem)。

问题链条:
1. Gmexecute 出来 不是引擎原生命令,M2 不认识 → 报“此命令不正确,或没有足够的权限”。
2. 但脚本继续往下跑,SENDMSG 1 恭喜... 是原生命令,正常执行 → 系统照发恭喜。
3. 因为 出来 根本没执行成功,物品没进背包 → 恭喜发了,包是空的。

所以不是“抽奖系统坏了”,是“刷物品那行没生效,但广播那行照跑了”。

二、为什么提示“没有足够的权限”

Gmexecute 默认要求当前执行者有 GM 权限,或者 M2 里开了“允许脚本使用 Gmexecute”。很多服的 M2 设置里,NPC 脚本调用 Gmexecute 需要:
• 脚本执行者被标记为 GM,或

• M2 参数里勾了“脚本 Gmexecute 不检测权限”,或

• 命令本身被引擎限制为仅管理员可用。

你这服显然没开允许,所以第一行就报权限不足。但脚本没 break,继续往下走,广播照发。

三、怎么改(按优先级)

方案 A:不用 Gmexecute,用 Give 或 AddItem

最稳。把:

Gmexecute 出来 时乘六龙ゞ盔 Self

换成引擎原生给物品命令,常见写法:

Give 时乘六龙ゞ盔 1



AddItem 时乘六龙ゞ盔 1

Give 是 GOM/GEE 标准命令,不需要 GM 权限,物品直接进玩家背包。前提是 StdItems.db 里物品名必须一字不差,包括那个“ゞ”符号,全角半角、空格都不能差。

方案 B:保留 Gmexecute,但改成正确的 GM 命令

如果你这服确实要用 Gmexecute 刷东西,先确认 M2 里 GM 命令表里有没有“出来”这条。没有就去 M2 → 游戏命令 / 管理命令里加一条,或者用原生 @MakeItem 类命令:

Gmexecute MakeItem 时乘六龙ゞ盔 1

但 MakeItem 也是部分版本才有,不如直接 Give 干净。

方案 C:加权限判断,避免报错

如果一定要用 Gmexecute,在 M2 里把“脚本 Gmexecute 权限”打开,或者给 NPC 脚本加 #IF 判断当前角色是否为 GM。但没必要,Give 就能解决。

四、完整改好的抽奖脚本


[@Star]
#IF
CHECKGAMEGOLD > 199
#ACT
goto @开始抽奖
#ELSEACT
messagebox 抽奖失败(你没有200元宝不能抽奖)!

[@开始抽奖]
#IF
random 500
#ACT
GAMEGOLD - 200
Give 时乘六龙ゞ盔 1
SENDMSG 6 抽奖获得:时乘六龙ゞ盔 1
SENDMSG 1 恭喜『%s』在抽奖员获得物品:时乘六龙ゞ盔 !
goto @main
break


改动就一行:Gmexecute 出来 ... Self → Give 时乘六龙ゞ盔 1。

五、为什么之前“超时后又能修东西”

你上一个问题里“特修超时后修好”和这个“报错但恭喜”是同一类机制:脚本引擎遇到不认识的命令,不中断整个脚本,而是跳过那行继续执行后面的。所以:
• 报错行被跳过 → 物品没给

• 后面的 SENDMSG 正常 → 广播照发

• 看起来像“抽奖成功但没东西”

六、其他可能坑

1. 物品名带特殊符号:时乘六龙ゞ盔 里的 ゞ 是全角片假名,如果 M2 数据库里存的是半角或不同编码,Give 也会失败。先在 M2 物品列表里搜“时乘六龙”,复制原名,别手打。
2. random 500 概率:random 500 是 1/500 概率中奖,不是“500 元宝”。如果你想让每次抽奖都必中,用 random 1 或直接去掉 #IF random。
3. CHECKGAMEGOLD > 199:这是检查元宝大于 199,不是“等于 200”。如果玩家有 199 元宝,条件不成立,走 #ELSEACT 提示失败,没问题。但如果玩家有 200 元宝,条件成立,扣 200,正常。
4. goto @main 和 break:goto @main 跳回主界面,break 结束当前脚本段。两个都留没问题,但如果你 goto 之后还写了别的命令,那些命令不会执行。你这脚本没问题。
5. 权限提示的另一种来源:如果你这服把“出来”定义成需要 GM 权限的命令,而 NPC 脚本执行者不是 GM,就会报权限不足。用 Give 绕开。

七、一句话总结

报“此命令不正确”是因为 Gmexecute 出来 这行命令不被引擎识别或没权限,系统恭喜是因为后面的 SENDMSG 照常执行,背包没东西是因为刷物品那行根本没跑成功。把 Gmexecute 出来 ... 换成 Give 时乘六龙ゞ盔 1,问题就没了。

如果换完 Give 还是没物品,去 M2 数据库里核对物品名,别让那个 ゞ 符号坑你。