PDA

Просмотр полной версии : Боты и виртуалка


pAladdin
30.06.2012, 00:32
Уважаемые форумчане, ни у кого не было опыта подключения L2Walker или L2NET к клиенту при помощи виртуалки?
Или может кто-то пробовал реализовать обход препятствий на локомотиве Незабудкина?

Noise
03.07.2012, 02:52
По идее если на сервере стоит норм pathnod то при клике по местности персонаж сразу будет бежать обходя препятствия.
Попробуй встань перед стенкой и кликнуть по точке где нить за стенкой(и посмотри как поведет себя персонаж)

Т.е. можно просто просто выбирать моба, смотреть его координаты, бежать к нему (вернее по его координатам), ну и проверять расстояние между собой и мобом и если оно меньше 200 например (т.е. между нами маловероятны препятствия) то брать моба в таргет и убивать :)

Я пару месяцев назад делал что то подобное (для Interlude PTS) и там все прекрасно работало, но только после этого систему на ноуте уже переставлял и хз отстался ли где скрипт...

Добавлено через 14 минут
Что то нашел:


//расстояние до моба
function CheckRange(x, y: Integer): integer;
var
rx, ry: Integer;
begin
rx := Char_x - x;
ry := Char_y - y;
range := round(sqrt(rx * rx + ry * ry));
result := range;
end;

// ищем точку между мной и мобом)
// 100 это удаленность точки от моба :)
procedure GoPoint(or_x,or_y: Integer);
var
xr, yr, x, y: Integer;
begin
xr := Char_x - or_x;
yr := Char_y - or_y;
x := trunc(100 * Sin(xr / range));
y := trunc(100 * Sin(yr / range));
x := x + or_x;
y := y + or_y;
MoveTo(x,y, npc_z);
end;


Остается запустить таймер и в нем проверять расстояние до моба ( и если оно меньше N просто атаковать цель:))

goodvin1709
03.07.2012, 03:30
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,C urPosY,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(Center Y)+','+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 ловить и добавлять в базу,потом,удалять при смерти,считывать таргет,Атака по таймеру,выбор моба для атаки(цыклом),ну и конечно к нему бежать.