L2PacketHackФорум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела!
Категорически запрещено:
* Просить пакеты/скрипты на шмот/адену/другие вещи;
* Просить (помочь) взломать/сломать сервак/аккаунт или раздеть/наказать кого-то на любом серваке;
* Просить научить работать с программой, если не понимаете элементарных вещей в отношениях клиент-сервер (так как, если вы их понимаете, то вопросов по основным возможностям программы быть недолжно);
* Все посты не удовлетворяющие этим запретам, а так же не относящиеся к теме будут удаляться при первой возможности.
* Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы.
* Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
* Данные запреты неподлежат обсуждению.
В общем есть такой скриптик под интерлюдию для рыбалки и мне он очень нравиться. Но есть проблемка , он не работает под грацию.
В инете я находил скрипты под грацию, но они очень громоздкие и там оч. много чего не нужного. Просьба такая, у кого нибудь если будет время может адаптировать этот скриптик под грацию. Признаюсь сразу что в програмирование я полный 0. Единственная надежда осталась только на вас. И да, заранее извенюсь если уже что-то подобное было, ибо воспользовавшись поиском ничего не нашел. Оффтоп
Код:
//Автоматизация ловли рыбы by NLObP для Интерлюдии и L2PacketHack v.3.1.8//
{Скрипт распространяется как есть, и я не несу ответственности
за то, что ВЫ натворили у себя, его используя.
Возможности скрипта:
Может работать несколько одновременных скриптов.
При нападении моба может атаковать его и может лечиться бутылками (настраиваемо).
Потрошит пойманную рыбу.
Подбирает выпавшие предметы.
Необходимо затариться удочкой и крючками, фишин-шотами
выучить соответствующие скиллы рыбалки.
При желании защищаться купить подходящее оружие, щит, соулшоты, бутылки.
!!!ВНИМАНИЕ!!!
!!!Перед первым использованием требуется внести изменение в константые!!!}
const
Name='SHAHIDenish'; //имя чара для которого включаем скрипт
HPbutt=70; // при каком количестве хп в % юзать бутылку лечения
HPuse1=true; //использовать ли бутылки лечения? true-да, false-нет
weapon1=true; //использовать оружие? true-да, false-нет
shield1=false;//использовать щит? true-да, false-нет
{Для инициализации скрипта проделай ниже следующее!!!
Главное не перепутй!!! За последствия не ручаюсь!!!'
- правая клавиша мыши (ПКМ) на оружии; Если было включено использование!!!
- ПКМ на щите; Если было включено использование!!!
- ПКМ на бутылке; Если было включено использование!!!
- ПКМ на удочке;
- ПКМ на крючке.
В процессе рыбалки используй один раз фишин-шот.
При необходимости включи соул-шоты в автоматический режим.
Социальное действие YES - начать рыбалку.
Социальное действие NO - остановиться.
Enjoy!
Скрипт проверялся на локальном сервере Интерлюдии "RT-Server-C6"}
//***************************************************************
const
fish=1312; //'2F 20 05 00 00 00 00 00 00 00';
pump=1313; //'2F 21 05 00 00 00 00 00 00 00';
reel=1314; //'2F 22 05 00 00 00 00 00 00 00';
//***************************************************************
var
StartTime: TDateTime;
EndTime: TDateTime;
info, msg, stats: TMemo;
frm: TForm;
UpdType, ItemObjID, ItemID, Lvl: integer;
fish1, fish2, mob1, death1: integer;
timer: TTimer;
timer2: TTimer;
status, status2, RodInUse:boolean;
Lure, ColvoLure, Shot, ColvoShot: Integer;
i, j: integer;
//защита от мобов
HPobjID, RodObjID, LureObjID: integer;
WeaponID, ShieldID, WeaponObjID, ShieldObjID,AttackerID, AttackerObjID: Integer;
MaxHP, CurHP, MyID, but: integer ;
MyXpos, MyYpos, MyZpos: integer;
Lure1, Rod1: boolean;
AnderAttack,HPuse2, Weapon2, Shield2, Lure2, Rod2: boolean;
//***************************************************************
//Вызывается при включении скрипта
//***************************************************************
procedure Init;
begin
Shot:=0;
Status:=false;
Status2:=false;
RodInUse:=false;
rod1:=true;
lure1:=true;
HPuse2:=false; //задействовано true-да, false-нет
weapon2:=false;
shield2:=false;
rod2:=false;
lure2:=false;
anderattack:=false; //атакован?
//форма
frm := TForm.Create(nil);
frm.Caption := 'FishBOT Info!';
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.Width:=570;
frm.Height:=500;
info:=TMemo.Create(frm);
info.parent:=frm;
info.align:=alLeft;
info.ReadOnly:=true;
info.ScrollBars:=2;
info.Width:=385;
info.Height:=370;
msg:=TMemo.Create(frm);
msg.parent:=frm;
msg.align:=alBottom;
msg.ReadOnly:=true;
msg.ScrollBars:=2;
msg.Width:=570;
msg.Height:=100;
msg.Lines.Add('...');
stats:=TMemo.Create(frm);
stats.parent:=frm;
stats.align:=alRight;
stats.ReadOnly:=true;
stats.ScrollBars:=0;
stats.Width:=180;
stats.Height:=100;
frm.Show;
//таймеры, можно поправить время по обстоятельствам
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=3000; //время задержки
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=true;
timer2.interval:=3000; //время задержки
info.Lines.Add('Автоматизация ловли рыбы by NLObP!');
info.Lines.Add('Для инициализации скрипта проделай ниже следующее!!!');
info.Lines.Add('Главное не перепутй!!! За последствия не ручаюсь!!!');
if (weapon1=true) then begin
info.Lines.Add('- правая клавиша мыши (ПКМ) на оружии;');
end;
if (shield1=true) then begin
info.Lines.Add('- ПКМ на щите;');
end;
if (HPuse1=true) then begin
info.Lines.Add('- ПКМ на бутылке;');
end;
info.Lines.Add('- ПКМ на удочке;');
info.Lines.Add('- ПКМ на крючке.');
info.Lines.Add('В процессе рыбалки используй один раз фишин-шот.');
if (weapon1=true) then begin
info.Lines.Add('Включи соул-шоты в автоматический режим.');
end;
//RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;
//***************************************************************
//Вызывается при выключении скрипта
//***************************************************************
procedure Free;
begin
timer.Free;
timer2.Free;
// msg.Free;
// stats.Free;
// info.Free;
// frm.Free;
end;
//***************************************************************
procedure OnTimer2(Sender: TObject); //выводим в форму
begin
ShowInfo;
if (CurHP<but) then begin
if (HPuse1=true) then begin
UseItem(HPobjID);
end;
end;
end;
//***************************************************************
procedure ShowInfo;
var
i: integer;
begin
//info.Lines.Clear;
stats.Lines.Clear;
stats.Lines.Add('Имя чара :'+Name);
stats.Lines.Add('Время старта :'+TimeToStr(starttime));
stats.Lines.Add('Время ловли :'+TimeToStr(time-starttime));
stats.Lines.Add('Поймали: '+IntToStr(fish1));
stats.Lines.Add('Сорвалось: '+IntToStr(fish2));
stats.Lines.Add('На нас напали: '+IntToStr(mob1)+' раз');
stats.Lines.Add('Погибли: '+IntToStr(death1)+' раз');
stats.Lines.Add('MaxHP: '+IntToStr(MaxHP));
stats.Lines.Add('CurHP: '+IntToStr(CurHP));
stats.Lines.Add('HPbutt :'+IntToStr(HPbutt)+' %хп');
stats.Lines.Add('but :'+IntToStr(but)+' ед.');
stats.Lines.Add('Кол-во Lure: '+IntToStr(ColvoLure)+' штук');
stats.Lines.Add('Кол-во Shots: '+IntToStr(ColvoShot)+' штук');
if (HPuse1=false) then stats.Lines.Add('Юзать бутылки?: НЕТ!') else stats.Lines.Add('Юзать бутылки?: ДА!');
if (weapon1=false) then stats.Lines.Add('Юзать оружие?: НЕТ!') else stats.Lines.Add('Юзать оружие?: ДА!');
if (shield1=false) then stats.Lines.Add('Юзать щит?: НЕТ!') else stats.Lines.Add('Юзать щит?: ДА!');
stats.Lines.Add('MyID: '+IntToStr(MyID));
stats.Lines.Add('MyXpos: '+IntToStr(MyXpos));
stats.Lines.Add('MyYpos: '+IntToStr(MyYpos));
stats.Lines.Add('MyZpos: '+IntToStr(MyZpos));
stats.Lines.Add('WeaponObjID: '+IntToStr(WeaponObjID));
stats.Lines.Add('ShieldObjID: '+IntToStr(ShieldObjID));
stats.Lines.Add('HPObjID: '+IntToStr(HPObjID));
stats.Lines.Add('RodObjID: '+IntToStr(RodObjID));
stats.Lines.Add('LureObjID: '+IntToStr(LureObjID));
end;
//***************************************************************
procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
end;
end;
if (MaxHP<>0) then // вычисляем процентное соотношение хп
begin
but:=Round((MaxHP/100)*HPbutt); // при каком количестве хп юзать бутылку лечения
end;
end;
//***************************************************************
procedure UseItem(ObjID:integer);
begin
buf:=#$14;
WriteD(ObjID);
WriteD(00);
SendToServerEx(Name);
end;
//***************************************************************
//2F=RequestMagicSkillUse:dMagicID)d(CtrlPressed)b(ShiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//***************************************************************
procedure Pumping;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot)
else msg.Lines.Add('Кончились шоты!'); //просто сообщаем, без шотов можно ловить
MagicSkillUse(pump);
end;
//***************************************************************
procedure Reeling;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot)
else msg.Lines.Add('Кончились шоты!'); //просто сообщаем, без шотов можно ловить
MagicSkillUse(reel);
end;
//***************************************************************
procedure Fishing;
begin
if ColvoLure<>0 then begin
RodInUse:=true;
MagicSkillUse(fish);
end
else begin
Status:=false;
info.Lines.Add('Кончились крючки!');
exit; //прекращаем рыбалку
end;
end;
//***************************************************************
procedure OnTimer(Sender: TObject);
begin
Fishing;
timer.enabled:=false;
end;
//***************************************************************
//04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag)
procedure Target(Attacker: Integer);
begin
buf:=#$04;
WriteD(Attacker);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
WriteC(00);
SendToServerEx(Name);
end;
//***************************************************************
//0A=Attack:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag)
procedure Attack(Attacker: Integer);
begin
buf:=#$0A;
WriteD(Attacker);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
WriteC(00);
SendToServerEx(Name);
end;
//***************************************************************
procedure TargetAttacker(Attacker: Integer);
begin
msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyID));
timer.enabled:=false;
Target(Attacker);
Attack(Attacker);
end;
//***************************************************************
procedure GiveWeapon;
begin
if WeaponObjID=0 then exit;
msg.Lines.Add('Берём='+IntToStr(WeaponObjID));
delay(700);
UseItem(WeaponObjID);
end;
//***************************************************************
procedure GiveShield;
begin
if ShieldObjID=0 then exit;
msg.Lines.Add('Берём='+IntToStr(ShieldObjID));
delay(700);
UseItem(ShieldObjID);
end;
//***************************************************************
procedure GiveRod;
begin
if RodObjID=0 then exit;
msg.Lines.Add('Берём='+IntToStr(RodObjID));
delay(1000);
UseItem(RodObjID);
end;
//***************************************************************
procedure GiveLure;
begin
if LureObjID=0 then exit;
msg.Lines.Add('Берём='+IntToStr(LureObjID));
delay(1000);
UseItem(LureObjID);
end;
//***************************************************************
function rastoyanie(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает переменную rezu которая является растоянием между 2 точками
begin
result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
//***************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//***************************************************************
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$04: begin
//пакет с инфой о моём чаре
i:=2;
MyXpos:=ReadD(i); //получаю координату х моего чара
MyYpos:=ReadD(i); //получаю координату у моего чара
MyZpos:=ReadD(i); //получаю координату z моего чара
//Запоминаем ИД
i:=18;
MyID:=ReadD(i); //получаю ид моего чара
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+48; //44 для С4
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
//****************************************************************************
//проверка на готовность скрипта
if (MyID<>0) and (ColvoLure<>0) and not status2 then begin
info.Lines.Add('Скрипт инициализирован!');
info.Lines.Add('Социальное действие YES - начать рыбалку!');
info.Lines.Add('Социальное действие NO - остановиться!');
status2:=true;
end;
end;
//***************************************************************
//05=Attack:d(AttackerID)h(targetID)d(Damage)b(Flags)d(X)d(Y)d(Z)d(ListHits)h(targetID)d(damage)b(flags)
#$05: begin
if (MyID=ReadD(6)) and (MyID<>ReadD(2)) then begin
timer.enabled:=false;
if not anderattack then begin
AttackerObjID:=ReadD(2);
msg.Lines.Add('На нас напали! ObjectID='+IntToStr(AttackerObjID));
giveweapon;
giveshield;
TargetAttacker(AttackerObjID);
anderattack:=true;
inc(mob1);
end;
end;
end;
//***************************************************************
//пакет Die (моб умер)
//06=Die:h(CharID)d(d)d(HAsHideout)d(HasCastle)d(flags)d(sweepable)d(access)
#$06: begin
msg.Lines.Add('Пакет Die! ObjectID='+IntToStr(AttackerObjID));
if (AttackerObjID=ReadD(2)) then begin
msg.Lines.Add('Убили моба! ObjectID='+IntToStr(AttackerObjID));
anderattack:=false;
GiveRod;
GiveLure;
timer.enabled:=true;
end;
if (MyID=ReadD(2)) then begin
info.Lines.Add('Нас убили в '+TimeToStr(time));
inc(death1);
timer.enabled:=false;
//reviverequest; //оживаем после смерти
end;
end;
//***************************************************************
//***************************************************************
#$0E: begin
if (MyID=ReadD(2)) then StatsUpdate; //обновление информации о хп
end;
//***************************************************************
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1)h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustType2)d(Augment)d(--)
//ItemList
#$1B: begin
msg.Lines.Add('ItemListPacket');
for i:=0 to ReadH(4)-1 do begin
ItemObjID:=ReadD(i*36+8);
ItemID:=ReadD(i*36+12);
Lvl:=ReadD(i*36+16); //количество
msg.Lines.Add('Предмет! ObjectID='+IntToStr(ItemObjID)+' ItemID='+IntToStr(ItemID)+' ColvoItem='+IntToStr(Lvl));
case ItemID of
7807..7809,6519..6527: begin
Lure:=ItemObjID;
ColvoLure:=Lvl;
end;
6535..6540: begin
Shot:=ItemObjID;
ColvoShot:=Lvl;
end;
end;
end;
end;
//***************************************************************
//27=InventoryUpdate:w(count)w(1add2mod3remove)w(itemType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(cusType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(cusType2)-(8)
//необходимо уточнить ItemID для своего сервера!!!
//запоминаем ObjectID Lure и ColvoLure
//***************************************************************
//ловим рыбу
#$FE: begin
if Status and (MyID<>0) then begin
case pck[2] of
//FE14=ExFishingEnd:w(subID)h(charObjtId)b(isWin)
#$14: begin
//FishingEnd
if ReadC(8) then inc(fish1) else inc(fish2);
if (MyID=ReadD(4)) then timer.enabled:=true; //FishingEnd ждем N секунд между ловлей рыбы
end;
#$16: begin
//FishinHPRegen
if (MyID=ReadD(4)) and (pck[15]+pck[16]=#$00#$00) then begin
delay(500);
pumping;
end;
if (MyID=ReadD(4)) and (pck[15]+pck[16]=#$00#$01) then begin
delay(500);
reeling;
end;
end;
end;
end;
end;
end;
end;
//****************************************************************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
#$14: begin
//Оружие
if Weapon1 and not weapon2 then begin
WeaponObjID:=ReadD(2);
weapon2:=true;
end else begin
//щит
if Shield1 and not shield2 then begin
ShieldObjID:=ReadD(2);
shield2:=true;
end else begin
//бутылка лечения
if HPuse1 and not hpuse2 then begin
HPObjID:=ReadD(2);
HPuse2:=true;
end else begin
//крючек
if Rod1 and not rod2 then begin
RodObjID:=ReadD(2);
Rod2:=true;
end else begin
//УДОЧКА
if Lure1 and not lure2 then begin
LureObjID:=ReadD(2);
Lure2:=true;
end; end; end; end; end;
end;
#$1B: begin
case ReadD(2) of
//социальное действие Yes для начала ловли
6: begin
if not status2 then exit;
Status:=true;
timer.enabled:=true;
StartTime:=time;
info.Lines.Add('FishBot включен!!!');
end;
//социальное действие No для окончания
5: begin
if not status2 then exit;
if Status and RodInUse then Fishing;
Status:=false;
RodInUse:=false;
timer.enabled:=false;
info.Lines.Add('FishBot выключен!!!');
end;
end;
end;
//ValidatePosition пакет от клиента с моими кординатами
#$48: begin
//обновляем ВСЕ растояния в BD если мы сошли с места
MyXpos:=ReadD(2); //получаю координату х моего чара
MyYpos:=ReadD(6); //получаю координату у моего чара
MyZpos:=ReadD(10); //получаю координату z моего чара
end;
end;
end;
end.