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

传奇GM在线给玩家发装备与取走装备脚本:NPC对话+GM命令+跨人发放全写法

热度:
一、前置条件
GM账号已加入M2→列表信息→管理员列表(或Mir200\Envir\AdminList.txt/GMList.txt),权限等级设到最高(一般10),重登录生效。
物品名必须与Mir200\Envir\StdItems.txt里的Name字段完全一致,“屠龙刀”和“屠龙”不是同一个东西,写错不刷。
脚本文件一律ANSI编码,放Mir200\Envir\Market_Def\或QuestDiary\下,改完@ReloadNpc或M2重载管理脚本。

二、NPC脚本里给“当前对话玩家”发装备/收装备(最常用)
Market_Def\GM发放员-3.txt(盟重土城地图号3):
[@main]
SAY

GM专用面板:\
<给自身屠龙/@giveme>\
<收回自身屠龙/@takeme>\
<给战士套装/@warsuit>\
<脱下身上屠龙/@takewear>\
<关闭/@exit>

[@giveme]
if

act

GIVE屠龙1
SENDMSG6已发放:屠龙x1
CLOSE

[@takeme]
if

CHECKITEM屠龙1
act

TAKE屠龙1
SENDMSG6已收回背包内:屠龙x1
elsesay

背包里没有屠龙。

[@warsuit]
if

CHECKJOBWarrior
act

GIVE屠龙1
GIVE战神盔甲(男)1
GIVE力量戒指1
GIVE骑士手镯1
GIVE绿色项链1
SENDMSG6战士套装已发放
elsesay

非战士职业,无法领取。

[@takewear]
if

act

TAKEW屠龙1
SENDMSG6已脱下并收回身上穿戴的屠龙
CLOSE

[@exit]
say

慢走。

命令区分:
•GIVE物品数量→进背包

-TAKE物品数量→只扣背包内,不扣身上穿的
•TAKEW物品数量→只卸身上穿戴栏的装备

•CHECKITEM→判背包;CHECKUSEITEM位置号→判身上某槽位是否穿着

三、游戏内直接敲的GM在线命令(针对自己或指定玩家)
通用Mir/GOM/Hero/LegendM2体系:
@Give角色名物品名数量
例:@Give张三屠龙1→给在线玩家“张三”发屠龙
@GiveItem物品名数量角色名
例:@GiveItem圣战头盔1张三
@Make角色名物品ID数量
例:@Make张三10011(1001为StdItems.txt里物品ID)
@TakeUserItem角色名物品名数量→没收指定玩家背包物品
对自己用把角色名换成自己/SELF或不填角色名。
Command.ini里这些命令前缀可被服务端改写,以你版本实际为准。

四、GMNPC输入“玩家名+物品名+数量”跨人在线发放(高级)
适合GM地图专属NPC,流程:弹框输物品名→输数量→输目标角色名→校验在线→跨人发/收。

1)MerChant.txt加GM地图NPC(假设GM地图号9999):
GM操作台99992020GM操作台015000

2)Market_Def\GM操作台-9999.txt:
[@main]
SAY

在线给/拿玩家装备:\
<给指定玩家物品/@senditem>\
<拿指定玩家物品/@takeitem>\
<关闭/@exit>

[@senditem]
@@InPutString1
@@InPutInteger2
@@InPutString3

;Hero端回调段名CallInPutString/CallInPutInteger,3K端去掉Call,下面按Hero写
[@CallInPutString1]
SAY

物品名已记录:S1\
<继续输数量/@nextnum>

[@nextnum]
@@InPutInteger2

[@CallInPutInteger2]
SAY

数量已记录:N2\
<输目标玩家名/@nextname>

[@nextname]
@@InPutString3

[@CallInPutString3]
if

CHECKONLINE$STR(S3)
act

CALCVARGLOBALZ12=$STR(S1)
CALCVARGLOBALZ13=$STR(N2)
SAVEVARGLOBALZ12..\QuestDiary\数据文件\ZSave.txt
SAVEVARGLOBALZ13..\QuestDiary\数据文件\ZSave.txt
HCALL$STR(S3)@给与物品
SENDMSG7已向玩家<$STR(S3)>发送S1xN2
GOTO@main
elsesay

目标玩家不在线。

[@takeitem]
@@InPutString4
@@InPutString5

[@CallInPutString4]
SAY

要收回的物品名:S4\
<输目标玩家名/@takename>

[@takename]
@@InPutString5

[@CallInPutString5]
if

CHECKONLINE$STR(S5)
act

CALCVARGLOBALZ11=$STR(S4)
SAVEVARGLOBALZ11..\QuestDiary\数据文件\ZSave.txt
HCALL$STR(S5)@拿走物品
SENDMSG7已向玩家<$STR(S5)>收回S4
GOTO@main
elsesay

目标玩家不在线。

[@exit]
say

结束。

3)QManage.txt里写实际执行段(被HCALL调起时在目标玩家上下文执行):
[@给与物品]
ACT

GIVEGLOBAL(Z12)GLOBAL(Z13)
MESSAGEBOX收到来自[GM]发送的物品:S12数量:S13
SENDMSG7收到GM发放物品
BREAK

[@拿走物品]
ACT

TAKE$GLOBAL(Z11)1
TAKEW$GLOBAL(Z11)1
MESSAGEBOX你的物品:S11已被[GM]强制收取
SENDMSG7物品被GM收回
BREAK

要点:HCALL目标角色名@标签→后续GIVE/TAKE在对方身上执行;Z11/Z12/Z13用QuestDiary\数据文件\ZSave.txt做全局变量中转;HCALL不支持的引擎改用GIVEITEM/TAKEITEM配合角色ID写法:
GIVEITEM角色名物品名数量
TAKEITEM角色名物品名数量
例:GIVEITEM张三屠龙1/TAKEITEM张三屠龙1

五、批量套装发放片段
[@givefullset]
if

act

GIVE屠龙1
GIVE战神盔甲(男)1
GIVE力量戒指2
GIVE骑士手镯2
GIVE绿色项链1
GIVE战神头盔1
GIVE战神靴1
GIVE烈火剑法1
SENDMSG6全套战士装备已发放
CLOSE

六、强制清包/清身(罚没场景)
[@clearall]
if

act

TAKE屠龙1
TAKE裁决之杖1
TAKEW屠龙1
TAKEW裁决之杖1
;要清更多逐行加TAKE/TAKEW
SENDMSG7违规物品已回收
CLOSE

七、常见不生效原因
•物品名和StdItems.txt不一致→GIVE无反应、GM命令提示物品不存在

•TAKE收不到身上穿的→忘了用TAKEW,TAKE只认背包

•HCALL不触发→目标不在线、角色名拼错、QManage.txt没加载、变量文件目录不存在

•脚本UTF-8→中文全乱码,改ANSI

•GM敲命令没反应→权限不够、Command.ini改了前缀、没重载管理员列表

•跨人发完对方看不到→没走HCALL/GIVEITEM,只在GM自己上下文GIVE了

GM在线发装备核心就三组:NPC里GIVE/TAKE/TAKEW管当前玩家;聊天框@Give/@Make/@TakeUserItem管指定角色;跨人在线发收用HCALL+QManage回调段或GIVEITEM/TAKEITEM,物品名对齐StdItems.txt就不会偏。
[顶部]