Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
 
 
Опции темы Опции просмотра
Старый 16.08.2008, 18:16   #1
Новичок
 
Регистрация: 16.08.2008
Сообщений: 1
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
alicsiel пока неопределено
По умолчанию Скрипты на Бота (Мага)

Извените за нескромный вопрос, на мага ботика есть здесь скрипты есть? ато нашол одного и тот глюканутый был.
Постоянно выбирает середину в центре МИРА!
delphi Код:
//Бот_маг with 'Hachling of Star' by NLObP { Социальное действие YES включить Социальное действие NO выключить Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя. } //****************************************************************************** Const   Name='ozzzzzz';      //имя чара   Pet='';           //имя Пета   max=500;         //max количество контролируемых мобов   Radius=1500;    //радиус участка для поиска мобов   DeltaZ=250;    //глубина/высота до мобов   Distance=600//дистанция до моба   icebolt=1184;    //ice bolt   windstrike=1177; //Wind Strike //****************************************************************************** VAR   NameChar: string;   CharID, PetID, Attacker, ObjectID: integer;   CentrKachX,CentrKachY,CentrKachZ,RadiusKachX,RadiusKachY: integer;   CentrKachXex,CentrKachYex,RadiusKachXex,RadiusKachYex: extended;   tempX,tempY, tempLenght: extended;   tempZ, ColvoMobs: integer;   xe,ye: extended;   x,y,z,ox,oy,oz,n: integer;   MobCurHP, MobMaxHP, CurHP, MaxHP, CurMP, MaxMP: integer;   BotCoordX,BotCoordY,BotCoordZ: integer; //координаты бота   BotCoordXext,BotCoordYext,BotCoordZext:extended;   MinPutID: integer; //указывает индекс моба в базе путь до которого самый короткий   MinPutLenght: extended; //расстояния до ближайшего моба   timer1: TTimer; //основной таймер   timer2: TTimer; //вспомогательный   timerA: TTimer; //вспомогательный   i, itm, SocialID: integer; // вспомогательная   time1, time2: integer;   AddMob, UnderAttack, scrready, NeedBackup, fire: boolean;   ItemBase:   array[1..4,1..max] of integer// описатель предметов   CharBase:   array[1..4,1..max] of integer// описатель игроков (которых не атакуем)   MobBase:    array[1..4,1..max] of integer// описатель мобов вокруг   MobBaseExt: array[1..4,1..max] of extended; // описатель мобов вокруг вспомогательная { 1 - ID   2 - X   3 - Y   4 - Z} //****************************************************************************** procedure Init; //Вызывается при включении скрипта begin   UnderAttack:=false;   itm:=0;   NeedBackup:=false;   scrready:=false;   colvomobs:=0;   timer1:=TTimer.Create(nil);   timer1.OnTimer:=@OnTimer1;   timer1.enabled:=False;   timer1.interval:=1500;        //каждые 2 сек ищем ближайшего моба для атаки   timerA:=TTimer.Create(nil);   timerA.OnTimer:=@OnTimerA;   timerA.enabled:=False;   timerA.interval:=1500;        //каждые 2 сек магическая атака   timer2:=TTimer.Create(nil);   timer2.OnTimer:=@OnTimer2;   timer2.enabled:=false;   timer2.interval:=5000;   //RequestItemList   buf:=hstr('0F');   SendToServerEx(Name); end; //****************************************************************************** procedure Free; //Вызывается при выключении скрипта begin   timer1.Free;   timer2.Free;   timerA.Free; end; //****************************************************************************** //сообщения в приват, на сервер не отправляются procedure Say(msg:string); begin   buf:=hstr('4A 00 00 00 00');   WriteD(2);   WriteS(Name);   WriteS(msg);   SendToClientEx(Name); end; //******************************************************************* function Wait(var tick: integer;Timewait: Integer): Boolean; // сквозная проверка без остановки скрипта (c)dmitry501 // modifed by Sh00rGo var   t: integer; begin   result:=false;   t:=Round(Time*86400);   if t>(tick+Timewait) then begin     if tick>0 then result:=true;     tick:=t;   end; end; //****************************************************************************** procedure ReqGetItem; begin   if itm=0 then begin     timer1.enabled:=true; //включаем отсчет времени     needbackup:=false;     exit;   end;   timer1.enabled:=false; //выключаем отсчет времени   //перебираем базу   for i:=1 to max do begin     //если нашли, то обнуляем     if (ItemBase[1,i]<>0) then begin  //ObjectID       say('ReqGetItem');       //даем команду подобрать вещь       buf:=#$04;       WriteD(ItemBase[1,i]);       WriteD(ItemBase[2,i]);       WriteD(ItemBase[3,i]);       WriteD(ItemBase[4,i]);       WriteH(00);       SendToServerEx(Name);     end;   end; end; //****************************************************************************** procedure OnTimer2(Sender: TObject); begin   UnderAttack:=false;     //отцепимся от атакуемого   if itm>0 then needbackup:=true; end; //****************************************************************************** //0E=StatusUpdate:h(ObjectID)d(AttribCount)d(AttrID)d(AttrValue) procedure StatusUpdate; var   i: integer; begin   for i:=0 to ReadD(6)-1 do begin     case pck[i*8+10] of       #$09: MobCurHP:=ReadD(i*8+14);       #$0A: MobMaxHP:=ReadD(i*8+14);     end;   end;   if (MobCurHP<=0) then begin     underattack:=false;     say('Убили!');   end; end; //****************************************************************************** procedure OnTimer1(Sender: TObject); begin   //не вычисляем, если уже атакуем   if UnderAttack then exit;   MinPutID:=0;   MinPutLenght:=99999999;   ///ищем самого близкого к нам моба   for i:=1 to max do begin     if (MobBaseExt[1,i]<>0) then begin       tempX:=MobBaseExt[2,i];       tempY:=MobBaseExt[3,i];       //расстояние по теореме Пифагора: c^2=a^2+b^2       tempLenght:=int(sqrt((BotCoordXext-tempx)*(BotCoordXext-tempx)+(BotCoordYext-tempy)*(BotCoordYext-tempy)));       if (tempLenght<MinPutLenght) and (PetID<>MobBase[1,i]) and (CharID<>MobBase[1,i]) then begin         MinPutLenght:=tempLenght;         MinPutID:=i;       end;     end;   end;   if (minputid<>0) then begin       Attacker:=MobBase[1,MinPutID];       TargetAttacker(Attacker);       say('Атакуем моба!');   end   else MoveCenter; end; //****************************************************************************** //01=MoveBackwardToLocation:d(targetX)d(targetY)d(targetZ)d(originX)d(originY)d(originZ)d(moveByMouse) procedure MoveDistance; begin     xe:=MobBase[2,MinPutID]+Distance/4+round(random*(Distance/4));     ye:=MobBase[3,MinPutID]+Distance/4+round(random*(Distance/4));     x:=round(xe);     y:=round(ye);     z:=MobBase[4,MinPutID];     buf:=#$01;     WriteD(x);     WriteD(y);     WriteD(z);     WriteD(BotCoordx);     WriteD(BotCoordy);     WriteD(BotCoordz);     WriteD(01);     SendToServerEx(Name);     say('держим дистанцию'); end; procedure MoveCenter; begin     buf:=#$01;     WriteD(CentrKachx);     WriteD(CentrKachy);     WriteD(CentrKachz);     WriteD(BotCoordx);     WriteD(BotCoordy);     WriteD(BotCoordz);     WriteD(01);     SendToServerEx(Name);     say('бежим в центр'); end; //****************************************************************************** procedure TargetAtt; begin   buf:=#$04;   WriteD(Attacker);   WriteD(BotCoordX);   WriteD(BotCoordY);   WriteD(BotCoordZ);   WriteC(00);   SendToServerEx(Name); end; //*************************************************************** //2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b(ShiftPressed) procedure MagicSkillUse(MagicID:integer); begin     buf:=#$2F;     WriteD(MagicID);     WriteD(00);     WriteC(00);     SendToServerEx(Name); end; //****************************************************************************** procedure OnTimerA(Sender: TObject); begin   MagicSkillUse(windstrike);   MoveDistance;   say('magic attack'); end; //****************************************************************************** procedure TargetAttacker(Attacker: Integer); begin   TargetAtt;   timerA.enabled:=true;   UnderAttack:=true; //зацепимся за атакуемого end; //****************************************************************************** //          вызывается при приходе каждого пакета если скрипт включен //****************************************************************************** begin   //****************************************************************************   //не пропускаем пустые пакеты   if pck='' then exit;   //****************************************************************************   //16=NpcInfo:h(ObjectID)d(NpcTypeID)d(IsAttackable)d(X)d(Y)d(Z)d(Heading)d(d)d(Maspd)d(Paspd)d(runSpd)d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRSpd)d(flWSpd)d(FlyRSpd)d(FlyWSpd)f(ProperMul)f(Paspd)f(CollisRadius)f(CollisHeight)d(RHand)d(d)d(LHand)b(nameabove)b(isRun)b(isInFight)b(isAlikeDead)b(isSummoned)s(Name)s(Title)d(d)d(d)d(karma?)d(abnEffect)d(d)d(d)d(d)d(d)b(c)b(Team)f(collisRadius)f(collisHeight)d(d)   //NPCInfo, запоминаем мобов   if FromServer and (ConnectName=Name) and (pck[1]=#$16) then begin     AddMob:=true;     //проверка, входит моб в радиус действия?     tempX:=ReadD(14); //x     tempY:=ReadD(18); //y     tempLenght:=sqrt((CentrKachXex-tempX)*(CentrKachXex-tempX)+(CentrKachYex-tempY)*(CentrKachYex-tempY));     //проверям, не под землей ли моб(в катакомбах)     tempZ:=BotCoordZ-ReadD(22);     if tempz<0 then tempZ:=tempz*(-1);     if tempZ<=DeltaZ then begin       if (tempLenght<Radius) then begin         for i:=1 to max do begin           //если нашли Моба в базе, то коректируем его координаты на новые           if (MobBase[1,i]=ReadD(2)) and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) then begin             MobBase[2,i]:=ReadD(14); //x             MobBase[3,i]:=ReadD(18); //y             MobBase[4,i]:=ReadD(22); //z             //Ext массив             MobBaseExt[2,i]:=ReadD(14); //x             MobBaseExt[3,i]:=ReadD(18); //y             MobBaseExt[4,i]:=ReadD(22); //z             AddMob:=false;           end;         end;         //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового моба         for i:=1 to max do begin           if (MobBase[1,i]=0) and AddMob and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) then begin             //запоминаем моба в свободную ячейку             MobBase[1,i]:=ReadD(2); //ObjectID             MobBase[2,i]:=ReadD(14); //x             MobBase[3,i]:=ReadD(18); //y             MobBase[4,i]:=ReadD(22); //z             //Ext массив             MobBaseExt[1,i]:=ReadD(2); //ObjectID             MobBaseExt[2,i]:=ReadD(14); //x             MobBaseExt[3,i]:=ReadD(18); //y             MobBaseExt[4,i]:=ReadD(22); //z             inc(colvomobs);             say('Запоминаем координаты Моба'+' ColvoMobs='+inttostr(colvomobs));             break;           end;         end;       end;     end;   end;   //****************************************************************************   //CharInfo, запоминаем игроков   if FromServer and (ConnectName=Name) and (pck[1]=#$03) then begin     AddMob:=true;     for i:=1 to max do begin       //если нашли чара в базе, то коректируем его координаты на новые       if (CharBase[1,i]=ReadD(18)) then begin         CharBase[2,i]:=ReadD(2)//x         CharBase[3,i]:=ReadD(6)//y         CharBase[4,i]:=ReadD(10); //z         AddMob:=false;       end;     end;     //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового чара     for i:=1 to max do begin       if (CharBase[1,i]=0) and AddMob then begin         //запоминаем моба в свободную ячейку         CharBase[1,i]:=ReadD(18); //ObjectID         CharBase[2,i]:=ReadD(2)//x         CharBase[3,i]:=ReadD(6)//y         CharBase[4,i]:=ReadD(10); //z         NameChar:=ReadS(22);         say('Приближается Игрок '+NameChar+'!!!');         break;       end;     end;     for i:=1 to max do begin       //если нашли Чара в базе Мобов, то удаляем его       if (MobBase[1,i]=ReadD(18)) then begin         MobBase[1,i]:=0; //x         MobBase[2,i]:=0; //x         MobBase[3,i]:=0; //y         MobBase[4,i]:=0; //z         //Ext массив         MobBaseExt[1,i]:=0; //x         MobBaseExt[2,i]:=0; //x         MobBaseExt[3,i]:=0; //y         MobBaseExt[4,i]:=0; //z         dec(colvomobs);         say('Нашли Чара в базе Мобов, удаляем его'+' ColvoMobs='+inttostr(colvomobs));       end;     end;   end;   //****************************************************************************   //MoveToLocation, коректируем координаты мобов в базе   if FromServer and (ConnectName=Name) and (pck[1]=#$01) then begin     AddMob:=true;     //проверка, входит моб в радиус действия?     tempX:=ReadD(6)//x     tempY:=ReadD(10); //y     tempLenght:=sqrt((CentrKachXex-tempX)*(CentrKachXex-tempX)+(CentrKachYex-tempY)*(CentrKachYex-tempY));     tempZ:=BotCoordZ-ReadD(14);     if tempz<0 then tempZ:=tempz*(-1);     if tempZ<=DeltaZ then begin       if (int(tempLenght)<Radius) then begin         //перебираем базу и ищем там моба, который бежит         for i:=1 to max do begin           //если нашли моба в базе, то коректируем его координаты на новые           if (MobBase[1,i]=ReadD(2)) and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) and (CharBase[1,i]<>ReadD(2)) then begin  //ObjectID             MobBase[2,i]:=ReadD(6)//x             MobBase[3,i]:=ReadD(10); //y             MobBase[4,i]:=ReadD(14); //z             //Ext массив             MobBaseExt[2,i]:=ReadD(6)//x             MobBaseExt[3,i]:=ReadD(10); //y             MobBaseExt[4,i]:=ReadD(14); //z             AddMob:=false;           end;         end;         //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового моба         for i:=1 to max do begin           if (MobBase[1,i]=0) and AddMob and (CharID<>ReadD(2)) and (PetID<>ReadD(2)) then begin             //запоминаем моба в свободную ячейку             MobBase[1,i]:=ReadD(2); //ObjectID             MobBase[2,i]:=ReadD(6); //x             MobBase[3,i]:=ReadD(10); //y             MobBase[4,i]:=ReadD(14); //z             //Ext массив             MobBaseExt[1,i]:=ReadD(2); //ObjectID             MobBaseExt[2,i]:=ReadD(6); //x             MobBaseExt[3,i]:=ReadD(10); //y             MobBaseExt[4,i]:=ReadD(14); //z             inc(colvomobs);             break;           end;         end;       end;     end;   end;   //****************************************************************************   //MagicSkillUse 48, Attack 05   if FromServer and (ConnectName=Name) and ((pck[1]=#$48) or (pck[1]=#$05)) then begin     if UnderAttack then exit; //сначало убъем одного     Attacker:=ReadD(2);     ObjectID:=ReadD(6);     if (Attacker<>ObjectID) and (CharID=ObjectID) then begin       UnderAttack:=true;     //нас атакуют       needbackup:=false;       Say('Нас атакуют!');       TargetAttacker(Attacker);     end;   end;   //****************************************************************************   //если принят пакет Die   if FromServer and (ConnectName=Name) and (pck[1]=#$06) then begin     //ищем моба в базе     if (Attacker=ReadD(2)) then begin       UnderAttack:=false; //убили атакующего моба       timerA.enabled:=False;     end;     for i:=1 to max do begin       //очишаем запись связанную с етим мобом       if (MobBase[1,i]=ReadD(2)) then begin         dec(colvomobs);         MobBase[1,i]:=0; //ObjectID         MobBase[2,i]:=0; //x         MobBase[3,i]:=0; //y         MobBase[4,i]:=0; //z         //Ext массив         MobBaseExt[1,i]:=0; //ObjectID         MobBaseExt[2,i]:=0; //x         MobBaseExt[3,i]:=0; //y         MobBaseExt[4,i]:=0; //z         break;       end;     end;   end;   //****************************************************************************   //если принят пакет DeleteObject   if FromServer and (ConnectName=Name) and (pck[1]=#$12) then begin     //ищем моба в базе     //say('DeleteObject');     if (Attacker=ReadD(2)) then begin       UnderAttack:=false; //убили атакующего моба       timerA.enabled:=False;     end;     for i:=1 to max do begin       //очишаем запись связанную с етим мобом       if (MobBase[1,i]=ReadD(2)) then begin         dec(colvomobs);         MobBase[1,i]:=0; //ObjectID         MobBase[2,i]:=0; //x         MobBase[3,i]:=0; //y         MobBase[4,i]:=0; //z         //Ext массив         MobBaseExt[1,i]:=0; //ObjectID         MobBaseExt[2,i]:=0; //x         MobBaseExt[3,i]:=0; //y         MobBaseExt[4,i]:=0; //z         break;       end;     end;     for i:=1 to max do begin       //если нашли в базе, то удаляем       if (CharBase[1,i]=ReadD(2)) then begin         CharBase[2,i]:=0; //x         CharBase[3,i]:=0; //y         CharBase[4,i]:=0; //z       end;     end;   end;   //****************************************************************************   //ValidatePosition если принят пакет от клиента с моими кординатами то   if FromClient and (ConnectName=Name) and (pck[1]=#$48) then begin     //запоминаем мои координаты     BotCoordX:=ReadD(2);     BotCoordY:=ReadD(6);     BotCoordZ:=ReadD(10);     //ext     BotCoordXext:=ReadD(2);     BotCoordYext:=ReadD(6);     BotCoordZext:=ReadD(10);   end;   //****************************************************************************   //если от сервака принят пакет с ИД и Координатами членов пати то   if FromServer and (ConnectName=Name) and (pck[1]=#$a7) then begin       //запоминаем ИД командира       CharID:=ReadD(6);       if scrready then exit       else begin         Say('Скрипт готов к работе. Запомнил ИД лидера');         scrready:=true;       end;   end;   //****************************************************************************   //если от сервака принят пакет с UserInfo   if FromServer and (ConnectName=Name) and (pck[1]=#$04) then begin       //Запоминаем собственный ИД       CharID:=ReadD(18);       if scrready then exit       else begin         Say('Скрипт готов к работе. Запомнил ИД лидера');         scrready:=true;       end;   end;   //****************************************************************************   //если от сервака принят пакет с PetInfo   if FromServer and (PetID=0) and (ConnectName=Name) and (pck[1]=#$b1) then PetID:=ReadD(6);   //****************************************************************************   //DropItem - выпала вещь   if FromServer and (ConnectName=Name) and (pck[1]=#$0C) then begin     //чужие вещи не берем     if (Attacker=ReadD(2)) then begin       timer1.enabled:=false; //выключаем бота       AddMob:=true;       //перебираем базу       for i:=1 to max do begin         //если нашли, то корректируем его координаты на новые         if (ItemBase[1,i]=ReadD(6)) then begin  //ObjectID           ItemBase[2,i]:=ReadD(14); //x           ItemBase[3,i]:=ReadD(18); //y           ItemBase[4,i]:=ReadD(22); //z           AddMob:=false;           inc(itm);           NeedBackup:=true;         end;       end;       //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем       for i:=1 to max do begin         if (ItemBase[1,i]=0) then begin           //запоминаем в свободную ячейку           ItemBase[1,i]:=ReadD(6); //ObjectID           ItemBase[2,i]:=ReadD(14); //x           ItemBase[3,i]:=ReadD(18); //y           ItemBase[4,i]:=ReadD(22); //z           inc(itm);           NeedBackup:=true;           break;         end;       end;     end;     say('ColvoItm='+inttostr(itm));   end;   //****************************************************************************   //каждые две сек подбираем предмет   if Wait(time1,2) and NeedBackup and (underAttack=false) then ReqGetItem;   //****************************************************************************   //определяем реальность поднятия вещи   //GetItem   if FromServer and (ConnectName=Name) and (pck[1]=#$0D) then begin     //перебираем базу     for i:=1 to max do begin       //если нашли, то обнуляем       if (ItemBase[1,i]=ReadD(6)) then begin  //ObjectID         ItemBase[1,i]:=0; //x         ItemBase[2,i]:=0; //x         ItemBase[3,i]:=0; //y         ItemBase[4,i]:=0; //z         dec(itm);         //say('Удаляем данные по предмету');       end;     end;     if itm=0 then begin       needbackup:=false;       timer1.enabled:=true;     end;     say('ColvoItm='+inttostr(itm));   end;   //******************************************************************************   //StatusUpdate   if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (Attacker=ReadD(2)) then StatusUpdate;   //****************************************************************************   if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin     SocialID:=ReadD(2);     pck:='';     case SocialID of       //социальное действие Yes для начала       6: begin         //if CharID=0 then exit;         CentrKachX:=BotCoordX;         CentrKachY:=BotCoordY;         CentrKachZ:=BotCoordZ;         CentrKachXex:=BotCoordXext;         CentrKachYex:=BotCoordYext;         Say('Команда Старт!!!');         say('Получили координаты центра');         say('X='+inttostr(BotCoordX)+' Y='+inttostr(BotCoordY));         timer1.enabled:=true;         exit;       end;       //социальное действие No для окончания       5: begin         //if CharID=0 then exit;         timer1.enabled:=false;         timer2.enabled:=false;         timerA.enabled:=False;         underattack:=false;         Say('Команда Стоп!!!');         exit;       end;     end;   end; end.
Добавлено через 15 часов 13 минут
типа тут нет маг бота нормального?

Последний раз редактировалось QaK, 18.08.2008 в 17:51. Причина: Добавлено сообщение
alicsiel вне форума   Ответить с цитированием
 

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:48.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!