как-то так чтоли
delphi Код:
const
n = 100;
fs_netping = #$D9;
fc_EnterWorld = #$11;
fc_logout = #$00;
fc_netping = #$B1;
var
NetPing: string;
LogOutOk: array of boolean;
playid : array of integer;
i,cnt:integer;
procedure init;
begin
cnt:=0;
end;
procedure NoClose;
begin
NoCloseFrameAfterDisconnect;
NoCloseClientAfterServerDisconnect;
NoCloseServerAfterClientDisconnect;
end;
procedure onfromserver;
begin
case pck[1] of
fs_netping: begin
for i:=0 to cnt do
if (playid[i]=connectid) and (LogOutOk[i]) then begin
buf:=NetPing;
SendToServer;
exit;
end;
end;
end;
end;
procedure onfromclient;
begin
case pck[1] of
fc_logout: begin
pck:='';
buf:=#$20;
SendToClient;
for i:=0 to cnt do
if (playid[i]=connectid) then begin
LogOutOk[i]:=true;
NoClose;
exit;
end;
end;
fc_netping: begin
NetPing:=pck;
pck:='';
end;
fc_enterworld: begin
SetLength(playid,cnt+1)
SetLength(logoutok,cnt+1)
playid[cnt]:=connectid;
logoutok[cnt]:=false;
inc(cnt);
if cnt >= 101 then cnt := 0;
end;
end;
end;
begin
if fromServer then
onfromserver
else
onfromclient;
end.
PS на нетпинг надо отвечать нихрена не так