当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

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

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

一、问题出在哪一行

看你这脚本:

Gmexecute出来时乘六龙ゞ盔Self


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

问题链条:
1.Gmexecute出来不是引擎原生命令,M2不认识→报“此命令不正确,或没有足够的权限”。
2.但脚本继续往下跑,SENDMSG1恭喜...是原生命令,正常执行→系统照发恭喜。
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类命令:

GmexecuteMakeItem时乘六龙ゞ盔1

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

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

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

四、完整改好的抽奖脚本


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

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


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

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

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

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

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

六、其他可能坑

1.物品名带特殊符号:时乘六龙ゞ盔里的ゞ是全角片假名,如果M2数据库里存的是半角或不同编码,Give也会失败。先在M2物品列表里搜“时乘六龙”,复制原名,别手打。
2.random500概率:random500是1/500概率中奖,不是“500元宝”。如果你想让每次抽奖都必中,用random1或直接去掉#IFrandom。
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数据库里核对物品名,别让那个ゞ符号坑你。
[顶部]