Delphi Код:
const
name='АхДаНикЧара';//Ник игрока.
Radius=1000;//Радиус кача.
HpProcent=75;//Процент при каком будет пить банки.
var
Loaded,Moved:Boolean;
CenterX,CenterY,CenterZ:Integer;//переменные центральной точки.
CurPosX,CurPosY,CurPosZ:Integer;//Переменные нахождения игрока.
GoToX,GoToY,GoToZ:Integer;//Переменные цели куда бежать.
HealOID,CountHeal:Integer;//Переменные банок из инвентаря.
procedure Init;
begin
CenterPoint_ToS;//Вызвали /loc.
Loaded:=false;//Инстализацыя.
Buf:=hstr('14');
SendToServerEx(name);
end;
Procedure CenterPoint_ToS;
begin
Buf:=Hstr('B3 00 00 00 00');
SendToServerEx(name);
end;
procedure Free;
begin
end;
function DIST(MOBX, MOBY, MOBZ:integer) : Integer;
var
x,y,z, summa : integer;
begin
x:= MOBX-CenterX;
y:= MOBY-CenterY;
z:= MOBZ-CenterZ;
summa:= x*x+y*y+z*z;
result:=Round(sqrt(summa));
end;
Procedure UseHeal(Oid:Integer);
begin
Buf:=#$19;
WriteD(Oid);
WriteD(0);
SendToServerEx(name);
end;
function DIST2(x1,y1,z1,x2,y2,z2:integer) : Integer;
var
x,y,z, summa : integer;
begin
x:= x2-x1;
y:= y2-y1;
z:= z2-z1;
summa:= x*x+y*y+z*z;
result:=Round(sqrt(summa));
end;
Procedure Move(X,Y,Z:Integer);
begin
if Moved=false then
begin
buf:=#$0F;
WriteD(X);//Куда бежать(X);
WriteD(Y);//Куда бежать(y);
WriteD(Z);//Куда бежать(z);
WriteD(0);//Origin X(можно 0 ставить)(твоя даная позиция)
WriteD(0);//Origin X(можно 0 ставить)(твоя даная позиция)
WriteD(0);//Origin X(можно 0 ставить)(твоя даная позиция)
WriteD(1);//Мышь-1 клава-0.
SendToServerex(name);
Moved:=true;
end;
end;
Procedure Run;
begin
CurPosX:=ReadD(2);
CurPosY:=ReadD(6);
CurPosZ:=ReadD(10);
SendMSG('До центра:'+vartostr(DIST(CurPosX,CurPosY,CurPosZ)));
if (moved=true) and (dist2(GoToX,GoToY,GoToZ,CurPosX,CurPosY,CurPosZ)<20) then
begin
Moved:=false;
SendMSG('Прийшли к цели.Дистанцыя между игроком и целью:'+vartostr(dist2(GoToX,GoToY,GoToZ,CurPosX,CurPosY,CurPosZ)));
end;
end;
Procedure Inventory;
var
I,id,oid,count:Integer;
begin
count:=ReadH(4);
for i:=0 to count do
begin
if ReadD(i*68+10)=1061 then
begin
HealOid:=ReadD(i*68+6);
CountHeal:=ReadQ(i*68+18);
i:=count;
SendMSG('Считали:Зелья Исцеления OID:'+vartostr(HealOid)+' Количество:'+vartostr(CountHeal));
UseHeal(HealOid);
end;
end;
end;
Procedure Check_Heal_Status;
begin
if (ReadD(14))<((ReadD(22)/100)*HpProcent) then UseHeal(HealOID);
end;
begin
if (fromserver) and (connectname=name) and (pck[1]=#$62) and (readD(6)=3) and (loaded=false) then
begin
CenterX:=ReadD(14);
CenterY:=ReadD(22);
CenterZ:=ReadD(30);
SendMSG('Центер записан...('+vartostr(CenterX)+','+vartostr(CenterY)+','+vartostr(CenterZ)+')');
Loaded:=true;
end;
if (fromClient) and (connectname=name) and (pck[1]=#$59) then Run;
If (FromServer) and (connectname=name) and (pck[1]=#$11) then Inventory;
If (fromServer) and (connectname=name) and (pck[1]=#$18) then Check_Heal_Status;
end.
Вот смесь моих процедур.еще пакетом NpcInfo ловить и добавлять в базу,потом,удалять при смерти,считывать таргет,Атака по таймеру,выбор моба для атаки(цыклом),ну и конечно к нему бежать.