L2PacketHackФорум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела!
Категорически запрещено:
* Просить пакеты/скрипты на шмот/адену/другие вещи;
* Просить (помочь) взломать/сломать сервак/аккаунт или раздеть/наказать кого-то на любом серваке;
* Просить научить работать с программой, если не понимаете элементарных вещей в отношениях клиент-сервер (так как, если вы их понимаете, то вопросов по основным возможностям программы быть недолжно);
* Все посты не удовлетворяющие этим запретам, а так же не относящиеся к теме будут удаляться при первой возможности.
* Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы.
* Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
* Данные запреты неподлежат обсуждению.
Уважаемые форумчане, ни у кого не было опыта подключения L2Walker или L2NET к клиенту при помощи виртуалки?
Или может кто-то пробовал реализовать обход препятствий на локомотиве Незабудкина?
По идее если на сервере стоит норм pathnod то при клике по местности персонаж сразу будет бежать обходя препятствия.
Попробуй встань перед стенкой и кликнуть по точке где нить за стенкой(и посмотри как поведет себя персонаж)
Т.е. можно просто просто выбирать моба, смотреть его координаты, бежать к нему (вернее по его координатам), ну и проверять расстояние между собой и мобом и если оно меньше 200 например (т.е. между нами маловероятны препятствия) то брать моба в таргет и убивать
Я пару месяцев назад делал что то подобное (для Interlude PTS) и там все прекрасно работало, но только после этого систему на ноуте уже переставлял и хз отстался ли где скрипт...
Добавлено через 14 минут
Что то нашел:
delphi Код:
//расстояние до моба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 просто атаковать цель)
__________________
Если студенту отрезать хвост, то к следующей сессии у него вырастет новый.
Последний раз редактировалось Noise, 03.07.2012 в 02:54.
Причина: Добавлено сообщение
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;
beginend;
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;
ProcedureMove(X,Y,Z:Integer);
beginif Moved=falsethenbegin
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)thenbegin
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:=0to count dobeginif ReadD(i*68+10)=1061thenbegin
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;
beginif(ReadD(14))<((ReadD(22)/100)*HpProcent)then UseHeal(HealOID);
end;
beginif(fromserver)and(connectname=name)and(pck[1]=#$62)and(readD(6)=3)and(loaded=false)thenbegin
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 ловить и добавлять в базу,потом,удалять при смерти,считывать таргет,Атака по таймеру,выбор моба для атаки(цыклом),ну и конечно к нему бежать.