下面的功能都是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;