奇迹Mu分析 - NPC相关操作

下面的功能都是NPC相关的,一如既往的封包实现:

一、打开银行

procedure TGameFunMgr.OpenBank(Id:Word);
type
  _Buffer = Packed record
    _C1:Byte;    //C1
    Len:Byte;
    cmd:byte;    //30
    funcid:word; //58cd
  end;
var
  Buffer:_Buffer;
begin
  Buffer._C1:=$C1;
  Buffer.Len:= 5;
  Buffer.cmd:=$30;
  Buffer.funcid:=Id;
  pNtGameSend(Buffer,Buffer.Len,1,0);
end;

二、关闭银行

procedure TGameFunMgr.CloseBank(PassClose:BOOL = True);
type
  _Buffer = Packed record
    _C1:Byte;    //C1
    Len:Byte;
    cmd:byte;    //82
  end;
var
  Buffer:_Buffer;
begin
  Buffer._C1:=$c1;
  Buffer.Len:=3;
  Buffer.cmd:=$82;
  MyClose:=PassClose;
  pNtGameSend(Buffer,Buffer.Len,0,0);
end;

三、打开买卖NPC(关于远程买卖的说明,如果NPC被打开过,既可以远程买卖,即进入游戏后操作过1次买卖NPC就可以进行远程买卖)

procedure TGameFunMgr.OpenSellNpc;
type
  _Buffer = Packed record
    _C1:Byte;    //C1
    Len:Byte;
    cmd:byte;    //30
    funcid:word; //50cd
  end;
var
  Buffer:_Buffer;
begin
  Buffer._C1:=$C1;
  Buffer.Len:= 5;
  Buffer.cmd:=$30;
  Buffer.funcid:=$50CD;
  pNtGameSend(Buffer,Buffer.Len,1,0);
end;
四、关闭买卖NPC

procedure TGameFunMgr.CloseSellNpc;
type
  _Buffer = Packed record
    _C1:Byte;    //C1
    Len:Byte;
    cmd:byte;    //82
  end;
var
  Buffer:_Buffer;
begin
  Buffer._C1:=$c1;
  Buffer.Len:=3;
  Buffer.cmd:=$31;
  pNtGameSend(Buffer,Buffer.Len,0,0);
end;

五、保存/取出物品

procedure TGameFunMgr.InOutItem(Flag: Integer);
type
  _Buffer = Packed record
    _C1:Byte;         //C1
    Len:Byte;         //19
    cmd:Byte;         //24
    BagId:Byte;       //背包ID
    NowPos:Byte;      //当前位置
    Range:Cardinal;   //
    Empty:Byte;       //0
    ItemId:Word;      //物品ID
    def2:Integer;     //FFFFFFFE
    def3:Byte;        //FF
    TarBagId:Byte;    //目标背包ID
    TarPos:Byte;      //目标位置
  end;
var
  Buffer:_Buffer;
begin
  if Flag = 0 then
    begin
      CopyMemory(@Buffer,@c_save_item,SizeOf(_Buffer));
    end
  else
    begin
      CopyMemory(@Buffer,@c_load_item,SizeOf(_Buffer));
    end;
  MyEncode(@Buffer,SizeOf(_Buffer));
  pItemMove(Buffer.BagId,Buffer.Len - 3);
  pNtGameSend(Buffer,Buffer.Len,1,0);
end;

六、接任务(任务支持远程交接,包括跨级交接任务)

procedure TGameFunMgr.GetTask(TaskId: Cardinal);
type
  _Buffer = Packed record
    _C1:Byte;    //C1
    Len:Byte;
    cmd:byte;    //F6
    flag:Byte;   //0B 接任务
    TaskId:Cardinal;
    Def:Byte;    //1
  end;
var
  Buffer:_Buffer;
begin
  Buffer._C1 :=$C1;
  Buffer.cmd:= $F6;
  Buffer.flag:=$B;
  Buffer.TaskId:=TaskId;//$4CEF381B;
  Buffer.Def:=1;
  Buffer.Len := 9;
  MyEncode(@Buffer,SizeOf(_Buffer));
  pGetTask(Buffer.flag,SizeOf(_Buffer) - 3);
  pNtGameSend(Buffer,Buffer.Len,0,0);
end;

七、交任务

procedure TGameFunMgr.PostTask(TaskId: Cardinal);
type
  _Buffer = Packed record
    _C1:Byte;    //C1
    Len:Byte;
    cmd:byte;    //F6
    flag:Byte;   //0D 交
    TaskId:Cardinal;
  end;
var
  Buffer:_Buffer;
begin
  Buffer._C1 :=$C1;
  Buffer.cmd:= $F6;
  Buffer.flag:=$D;
  Buffer.TaskId:=TaskId;
  Buffer.Len := 8;
  MyEncode(@Buffer,SizeOf(_Buffer));
  pGetTask(Buffer.flag,SizeOf(_Buffer) - 3);
  pNtGameSend(Buffer,Buffer.Len,0,0);
end;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值