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.
Но проблемка.Он то конечно фармит,и довольно долго.Но помогите его пофиксить.Иногда долго над убитым стоит.Но как таргет сменить он дальше фармит.
по всей видимости Die порой теряется. я бы сделал следующее:
добавил переменную начала атаки. то есть если ботинок взял в таргет моба, после этого юзал скилы и был урон, то переменная = 1. теперь в случае когда переменная = 1 и пошли пакеты action fail - то предположительно моб здох и пора переключатся на следующего.
также следует вести мониторинг дамага по самому ботинку и записывать все id мобов, что тебя бьют в потенциальный будущий таргет, чтобы потом их убить, как "работа" по убийству первой цели закончится.
легко сказать наброски у меня ж другие хроники скорей всего... смотри системное сообщение приходит, которое урон показывает - вот от него и танцуй.
а после смотри на фейлы, когда моб умер - сам жмешь кость и смотри какие системные сообщения приходят - вот и будет тебе маркер, когда следует менять таргет.
Нужно так пообщаться нужно скрипт локомотива под ГФ переделать под мага что то мой древние знания меня уже подводят,нужно совет ну или как реализовать эту дрянь атаку 2 скилами.(вамп,кость),дроп то я убрал что бы он не собирал даже если он есть а вот как с физ атаки сделать маг я вобще хз, http://rghost.ru/private/51879743/c7...7361de2e4da91eВот скрипт локомотива.