📄 gamepacket.pas
字号:
unit gamepacket;
interface
uses
Windows, Sysutils, Classes,
Dialogs, datamanage, gamecode;
procedure gamePacketsend (buf:pchar; len:integer);
procedure gamePacketrecv (buf:pchar; len:integer);
procedure newsendnum; //更新封包序列号
procedure mysend (buf:pchar; len:integer);
var
stratnum : bool = false ; //初始化封包序号标志
sendcount : array [0..1] of byte ; //游戏发送封包序号 2字节. 无符号型
newsendcount :pchar; //游戏发送封包序号 2字节. char型
implementation
procedure mysend (buf:pchar; len:integer);
var
i,onelen :integer;
packet_Header :pchar;
begin
i := 0;
onelen := 0;
packet_header := buf;
while i < len do
begin
if buf[i] = '(' then
begin
onelen := 1;
packet_header := @buf[i] ;
end;
if buf[i] = ')' then
begin
gamepacketsend (packet_header,onelen);
end;
inc (onelen);
inc (i);
end;
end;
procedure newsendnum; //更新封包序列号
begin
if byte(newsendcount[0]) <> $FF then
begin
sendcount[0] := byte(newsendcount[0]);
inc (sendcount[0]);
sendcount[1] := byte(newsendcount[1]);
newsendcount := @sendcount;
end else //如果第一位是FF 第二位加上 1
begin
sendcount[0] := $00;
sendcount[1] := byte(newsendcount[1]);
inc (sendcount[1]);
newsendcount := @sendcount;
end;
end;
procedure gamePacketsend (buf:pchar; len:integer);
var
outchar,recvbuf : array [0..4096] of char ;
begin
copychar ( buf, recvbuf, len );
Decode ( @recvbuf[1], len-1, outchar);
if stratnum = false then //初始化封包序列号 (只执行一次)
begin
sendcount[0] := byte(outchar[2]);
sendcount[1] := byte(outchar[3]);
newsendcount := @sendcount;
stratnum := true;
end;
end;
procedure gamePacketrecv (buf:pchar; len:integer);
var
// i:integer;
outchar : array [0..20000] of char ;
recvbuf : array [0..5000] of char ;
begin
Fillchar(outchar,20001,chr(0));
Fillchar(recvbuf,5001,chr(0));
{for i:=0 to 5000 do
begin
outchar[i]:=chr(0);
recvbuf[i]:=chr(0);
end;
}
copychar ( buf, recvbuf, len );
Decode ( @recvbuf[1], len-1, outchar);
case ord(outchar[10]) of
$02 :queren(outchar);
$03 :zhanghaocon(outchar);
$04 :speak(outchar);
$05 :eatmedication(@outchar[11]);//人物状态(年龄/元气/内.外.武.功.元气)
$06 :gaingoods(outchar); //往物品栏增加或减少物品
$07 :addwugong(outchar); //一层武功
$08 :equip(outchar); //人物装备
$09 :changemap(outchar);
$10 :selfmovexy(outchar);//遇到障碍弹回
$0A :showmop(outchar); //显示地图名字
$0b :npcdie(outchar);
$0C :say(outchar); //喊话
$0f :selfxy(outchar); //人物战斗走动坐标
$12 :manstate(outchar); //人物状态
$16 :attack(outchar);
$17 :tackattrib(outchar); //人物其他附加属性 如 真气 浩然 等
$1b :monsterlife(outchar);
$1C :showdropgoods(outchar); //显示掉落物品
$1E : disgoods(outchar); //消失得物品
$20 : usegongfu(outchar);
$22 : basicskill(outchar); //无名类武功
$2F : balk(outchar); //障碍显示
$30 : balkdis(outchar); //障碍消失
$32 : gonggaolan(outchar);
$36 : happly(outchar);
$3A : happly(outchar);
$3D : twogest(outchar); //二层武功
$3E : gestglass(outchar);//人物镜子
$43 : trademenu(outchar); //交易菜单
$44 : makeskill(outchar);
$46 : techgoods(outchar); //技能
$4C : palmwind(outchar); //掌风栏
$53 : zhitiao(outchar); //纸条
$54 : useitem(outchar); //使用物品
$56 : threegest(outchar); //三层武功
$57 : realgas(outchar); //真气
$FD : ipreset(outchar);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -