Попробуй воспользоваться подпрограммами
Надо учесть, что пакет A7=PartyMemberPosition:d(membercount)d(objID)d(X)d (Y)d(Z)
1-й это командир пати, следующие патимемберы по порядку как перечислены в клиенте.
Код:
//***************************************************************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag)
procedure Target(AttackerObjID: Integer);
begin
buf:=#$04;
WriteD(AttackerObjID);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
WriteC(00);
SendToServerEx(Name);
end;
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$04: begin
//пакет с инфой о моём чаре
i:=2;
MyXpos:=ReadD(i); //получаю координату х моего чара
MyYpos:=ReadD(i); //получаю координату у моего чара
MyZpos:=ReadD(i); //получаю координату z моего чара
//Запоминаем ИД
i:=18;
MyObjID:=ReadD(i); //получаю ид моего чара
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+48; //44 для С4
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
end;
//****************************************************************************
//если от сервака принят пакет с ИД и Координатами членов пати то
//A7=PartyMemberPosition:d(membercount)d(objID)d(X)d(Y)d(Z)
#$A7: begin
//запоминаем ИД командира
MyObjID:=ReadD(6);
end;
end;
end;
if (ConnectName=Name) and FromClient then begin
case pck[1] of
//ValidatePosition пакет от клиента с моими кординатами
#$48: begin
//обновляем если мы сошли с места
MyXpos:=ReadD(2); //получаю координату х моего чара
MyYpos:=ReadD(6); //получаю координату у моего чара
MyZpos:=ReadD(10); //получаю координату z моего чара
end;
end;
end.