L2PacketHackФорум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела!
Категорически запрещено:
* Просить пакеты/скрипты на шмот/адену/другие вещи;
* Просить (помочь) взломать/сломать сервак/аккаунт или раздеть/наказать кого-то на любом серваке;
* Просить научить работать с программой, если не понимаете элементарных вещей в отношениях клиент-сервер (так как, если вы их понимаете, то вопросов по основным возможностям программы быть недолжно);
* Все посты не удовлетворяющие этим запретам, а так же не относящиеся к теме будут удаляться при первой возможности.
* Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы.
* Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
* Данные запреты неподлежат обсуждению.
Вот возникла в принципе потребность пофармить на одном сервере через пакетник.
Взял некра.
Нужно было написать скрипт для фарма в любой локации любых мобов.
Есть автолут на сервере т.е адена и другие ценные вещи падают в сумку.
Вот мой скрипт Оффтоп
Delphi 7 Код:
const
name='...';
Radius=900;
Base=20;//Розмер базы.
var
Timer,timer2:TTimer;
DieOid,a:Integer;
NpcInfo:array[0..7] of Integer;
CenterX, CenterY, CenterZ : integer;
TargetID:Integer;
number:Integer;
started:boolean;
potionOid:Integer;
tick:integer;
MOBarray:array [0..Base,0..6] of Integer;
procedure Init;
begin
started:=false;
number:=0;
Timer := TTimer.Create(nil) ;
Timer.Interval := 500;
Timer.Enabled :=False;
Timer.Ontimer := @OnTimer ;
Timer2 := TTimer.Create(nil) ;
Timer2.Interval := 1000;
Timer2.Enabled :=False;
Timer2.Ontimer := @OnTimer2 ;
tick:=0;
end;
Procedure Ontimer2;//Атака моба.
begin
timer2.enabled:=false;
SendMSG('Ждем моба...');
NextTarget;
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 Ontimer;//Атака моба.
var
i:integer;
begin
Timer.enabled:=false;
if tick>25 then
begin
SendMSG('Моба убили уже до нас.');
For i:=0 to Base do
if MOBarray[i,0]=TargetID then
begin
MOBarray[i,0]:=0;
MOBarray[i,1]:=0;
MOBarray[i,2]:=0;
MOBarray[i,3]:=0;
MOBarray[i,4]:=0;
MOBarray[i,5]:=0;
MOBarray[i,6]:=0;
break;
end;
nexttarget;
end;
if a=1 then
begin
Buf:=hstr('39 EF 04 00 00 00 00 00 00 00'); //Глум.
SendToServerEx(name);
a:=a+1;
tick:=tick+1;
if TargetID<>0 then Timer.enabled:=True;
end;
if (a mod 2) = 0 then
begin
buf:=hstr('39 7C 04 00 00 00 00 00 00 00');//Кости.
SendToServerEx(name);
Inc(a);
tick:=tick+1;
if TargetID<>0 then Timer.enabled:=True;
end;
if (a mod 2)<>0 then
begin
buf:=hstr('39 D2 04 00 00 00 00 00 00 00');//Вамп
SendToServerEx(name);
a:=a+1;
tick:=tick+1;
if TargetID<>0 then Timer.enabled:=True;
end;
end;
procedure Free;
begin
Timer.free;
Timer2.free;
end;
Procedure MobDie;
var
i:Integer;
begin
For I:=0 to Base do
if MOBarray[i,0]=ReadD(2) then
begin
MOBarray[i,0]:=0;
MOBarray[i,1]:=0;
MOBarray[i,2]:=0;
MOBarray[i,3]:=0;
MOBarray[i,4]:=0;
MOBarray[i,5]:=0;
MOBarray[i,6]:=0;
break;
end;
end;
Procedure MobBase;
var
I:Integer;
begin
NpcInfo[0]:=ReadD(2);//OID
NpcInfo[1]:=ReadD(6);//ID
NpcInfo[2]:=ReadD(10);//Atackable
NpcInfo[3]:=readD(14);//X
NpcInfo[4]:=ReadD(18);//y
NpcInfo[5]:=readD(22);//z
NpcInfo[6]:=readC(121);//Dead.
NPCInfo[7]:=ReadC(120);//ISCombat
if (NpcInfo[2]=1) and (NpcInfo[7]=0) and (NpcInfo[0]<>TargetID) and (NPCInfo[6]=0) and (DIST(NpcInfo[3],NpcInfo[4],NpcInfo[5])<Radius) then
begin
for i:=0 to Base do
if MOBarray[i,0]=0 then
begin
number:=i;
break;
end;
MOBarray[number,0]:=NpcInfo[0];
MOBarray[number,1]:=NpcInfo[1];
MOBarray[number,2]:=NpcInfo[2];
MOBarray[number,3]:=NpcInfo[3];
MOBarray[number,4]:=NpcInfo[4];
MOBarray[number,5]:=NpcInfo[5];
MOBarray[number,6]:=NpcInfo[6];
SendMSG('Добавил моба в базу его ИД:'+vartostR(number));
end;
end;
Procedure NextTarget;
var
I:Integer;
begin
For i:=0 to Base do
if MOBarray[i,0]<>0 then
begin
TargetID:=MOBarray[i,0];
buf:=#$1f;
WriteD(TargetID);
WriteD(0);
WriteD(0);
WriteD(0);
WriteC(0);
SendToServerEx(name);
a:=1;
tick:=0;
Timer.enabled:=true;
SendMSG('Target OID:'+vartostr(TargetID));
break;
end;
if TargetID=0 then
begin
timer2.enabled:=true;
SendMSG('В базе нет мобов. Включаем режим ожидания.');
end;
end;
Procedure CheckMP;
var
i:Integer;
CurMP,MaxMp:Integer;
begin
//Проверяем мое мп.
if (ReadD(10)=11) and (ReadD(18)=12) then
begin
CurMP:=ReadD(14);
MaxMP:=ReadD(22);
if CurMP<1000 then
begin
buf:=#$19;//Выпиваем банку по нужде.
WriteD(PotionOid);
WriteD(0);
SendToServerEx(name);
end;
end;
//Если убили моба.
if (ReadD(2)=TargetID) and (readD(10)=9) and (ReadD(14)=0) then
begin
timer.enabled:=false;
buf:=hstr('48 00 00');
SendToServerEx(name);
targetID:=0;
SendMSG('Убили моба:'+vartostr(ReadD(2)));
For i:=0 to Base do
if MOBarray[i,0]=ReadD(2) then
begin
MOBarray[i,0]:=0;
MOBarray[i,1]:=0;
MOBarray[i,2]:=0;
MOBarray[i,3]:=0;
MOBarray[i,4]:=0;
MOBarray[i,5]:=0;
MOBarray[i,6]:=0;
SendMSG('Удалил моба з базы.OID:'+vartostr(ReadD(2)));
break;
end;
NextTarget;
end;
end;
begin
if ConnectName=Name then
begin
If FromServer then
Begin
if pck[1]=#$00 then MobDie; //Плохо срабатывает некоректная работа.
if pck[1]=#$0C then MobBase;
if pck[1]=#$18 then CheckMP;
end;
If FromClient then
begin
if pck[1]=#$1f then
begin
//TargetID:=ReadD(2);
//SendMSG('Target OID:'+vartostr(TargetID));
end;
if pck[1]=#$19 then
begin
PotionOiD:=ReadD(2);
if started=false then
begin
started:=true;
NextTarget;
end;
end;
if pck[1]=#$0F then
begin
CenterX:= ReadD(2);
CenterY:= ReadD(6);
CenterZ:= ReadD(10);
SendMSG('Записали Координаты: X: '+vartostr(CenterX)+' Y: '+vartostr(centerY)+' Z: '+vartostr(centerZ));
end;
end;
end;
end.
Но проблемка.Он то конечно фармит,и довольно долго.Но помогите его пофиксить.Иногда долго над убитым стоит.Но как таргет сменить он дальше фармит.