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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 12.11.2007, 16:53   #71
Новичок
 
Регистрация: 07.11.2007
Сообщений: 14
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
PunkRediska
По умолчанию Re: Re:

Цитата:
Сообщение от NLObP
Цитата:
Сообщение от PunkRediska
с карденатай ето я случяйно ашибся када переписывал....там в чёмто другом праблема:(
Может близко стоять надо?
я разабрался в чём там праблема.....там кагда хп моба=0 вылетают паакеты нескалько из каторых дроп айтим причём они идут падрят с интервалам в t причём t стремиться к нулю и t> чем время обработки скрипта вобшем праблема в движке он запускает скрипт для первого пакета а, пака скрипт выпалняеться приходят несколко других пакетав.Вот и палучяеться что кагда скрипт атправляет пакет паднять кол-во пришедших на клиент паетав дроп айтим>1ого,но следуйший абрабатываемый пакет это не тот пакет каторый был после 1ого дроп айтима а тот пакет каторый идёт за пакетам каторый атаслал скрипт.

Добавлено спустя 1 час 1 минуту 42 секунды:
Ёпт ^выше описано^ это глюк с скриптам сборшикам лута(каторый писал я ) :) но баг движка астаёться в силе:)
__________________
http://www.magnum-shoes.ru/
PunkRediska вне форума   Ответить с цитированием
Старый 12.11.2007, 18:33   #72
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: ТОчка хлапой

Цитата:
Сообщение от Druids
l2phx наезжает на строчку в этой строке:
ListCount:=ReadH(j); //количество итемов не должно превышать max!
И что это значит?это он выделяет когда ещё неподключился к клиенту,а когда подключается,то постоянно выдаёт ошибки
У тебя какие хроники? Для С4 и Интерлюдии отличается скрипт.
Скопируй в свой скрипт взамен своего, и расскоментируй нужную часть, закоменти ненужную:
Код:
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
  i, ss, ww, j, ObjID, ItemID, lvl, ListCount: integer;
begin
  ss:=1; //индекс в массиве скроллов
  ww:=1; //индекс в массиве предметов
  j:=4; //смещение для ListCount
  ListCount:=ReadH(j);                   //количество итемов не должно превышать значение в константе max!
  if ListCount>max then ListCount:=max; //если больше, то игнорируем и используем значение из max!
  j:=8; //смещение для ObjectID
  //Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
  for i:=1 to ListCount do begin
     ObjID:=ReadD(j);      //ObjectID
     ItemID:=ReadD(j);    //ItemID
     j:=j+14;
     Lvl:=ReadD(j);    //Level
     case ItemID of
        scroll: begin
            ScrlBase[ss]:=ObjID;
            inc(ss);
        end;
        weapon: begin
            WpnBase[1,ww]:=ObjID;
            WpnBase[2,ww]:=lvl;
            inc(ww);
        end;
     end;
    //для С4
    j:=j+2;
   //для Интерлюдии
   //j:=j+10;
  end;
  dec(ColvoWpn);
  dec(ColvoScrl);
end;
Замени у себя еще проедуру INIT на эту, здесь сразу запрашивается список предметов:
Код:
procedure Init; //Вызывается при включении скрипта
var
  i:integer;
begin
  CurEnchLvl:=0;
  timer:=TTimer.Create(nil);
  timer.OnTimer:=@OnTimerHP;
  timer.enabled:=false;
  timer.interval:=5000; //время задержки
  add:=false;
  //RequestItemList запрашиваем пакет списка предметов
  buf:=hstr('0F');
  SendToServerEx(Name);
end;
Добавлено спустя 17 минут 25 секунд:
Цитата:
Сообщение от Druids
l2phx наезжает на строчку в этой строке:
ListCount:=ReadH(j); //количество итемов не должно превышать max!
И что это значит?это он выделяет когда ещё неподключился к клиенту,а когда подключается,то постоянно выдаёт ошибки
Не забудь поправить под себя вот эти константы:
Код:
const
  Name='NLObP';  //заменить на имя своего чара
  Scroll=957; // чем будем точить, например 957 - ItemID Crystall Scroll Enchant Weapon (Grade D)
  Weapon=129; //что будем точить, например  129 - ItemID Sword of Revolution
  MaxEnchLvl=21; //поставить максимальный желаемый уровень заточки, не факт что доточится =)
Добавлено спустя 7 минут 56 секунд:
Re: Re:
Цитата:
Сообщение от PunkRediska
я разабрался в чём там праблема.....там кагда хп моба=0 вылетают паакеты нескалько из каторых дроп айтим причём они идут падрят с интервалам в t причём t стремиться к нулю и t> чем время обработки скрипта вобшем праблема в движке он запускает скрипт для первого пакета а, пака скрипт выпалняеться приходят несколко других пакетав.Вот и палучяеться что кагда скрипт атправляет пакет паднять кол-во пришедших на клиент паетав дроп айтим>1ого,но следуйший абрабатываемый пакет это не тот пакет каторый был после 1ого дроп айтима а тот пакет каторый идёт за пакетам каторый атаслал скрипт.
Все верно пишешь. Только надо учесть, что сама прога успевает посмотреть все пакеты, так как она их шифрует/дешифрует. Не успевает клиент за скриптом. Для этого пакетики мы в базу складываем, а потом заставляем клиента все пакетики исполнить. У меня лично, все предметы собирает, но бывает и подглючивает.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 12.11.2007, 19:18   #73
Новичок
 
Регистрация: 07.11.2007
Сообщений: 14
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
PunkRediska
По умолчанию Re: ТОчка хлапой

Цитата:
Сообщение от NLObP

Добавлено спустя 7 минут 56 секунд:
Re: Re:
Цитата:
Сообщение от PunkRediska
я разабрался в чём там праблема.....там кагда хп моба=0 вылетают паакеты нескалько из каторых дроп айтим причём они идут падрят с интервалам в t причём t стремиться к нулю и t> чем время обработки скрипта вобшем праблема в движке он запускает скрипт для первого пакета а, пака скрипт выпалняеться приходят несколко других пакетав.Вот и палучяеться что кагда скрипт атправляет пакет паднять кол-во пришедших на клиент паетав дроп айтим>1ого,но следуйший абрабатываемый пакет это не тот пакет каторый был после 1ого дроп айтима а тот пакет каторый идёт за пакетам каторый атаслал скрипт.
Все верно пишешь. Только надо учесть, что сама прога успевает посмотреть все пакеты, так как она их шифрует/дешифрует. Не успевает клиент за скриптом. Для этого пакетики мы в базу складываем, а потом заставляем клиента все пакетики исполнить. У меня лично, все предметы собирает, но бывает и подглючивает.
тоесть шёчики в скриптах ка4 с драконьчекам,лакаматив и т.д. нужны что бы все каманды выпалнялись клиентам своевременно?Я чесно гаваря плохо панемаю как именно пашют эти скрипты так-как там дофига процедур и функций , а их работу я панемаю в обших чертах,тоесть я панемаю как пашет процедура панемаю зачем она ,но писать их неумею и ненаю как они вызываються:)

Добавлено спустя 19 минут 56 секунд:
слушай NLObP я канешно читаю правила форума 4 раза на день,но всё таки памаги пожжалуйсто с такой ситуацией:
я нашол место где стаит 3 яшика рядам и сразу захател написать скрипт бот,но так как я незнаю как описывать процедуры решил писать систему скриптав каторые работая одновременно заменяли 1 нармальный скрипт вот они->
1.открывалка
var i:integer;
begin

if FromServer and (pck[1]=#$16) then begin
buf:=#$04+hstr('(readd(2))+(readd(14))+(readd(18)) +(readd(22))') + #$00;
SendToServer;
buf:=hstr('04 C2 B9 1E 10 A3 55 01 00 C3 46 01 00 09 F4 FF FF 00 ');
SendToServer; SendToServer;
i:=1;
end;
buf:=hstr('04 3D 97 1E 10 D5 55 01 00 3B 46 01 00 F8 F3 FF FF 00');
SendToServer;
end.
2.если чест огрызаеться
begin
if fromserver and (pck[1]=#$05) then begin
buf:=#$04+hstr('(readd(6))+(readd(15))+(readd(19)) +(readd(23))')+#$00#$00;
SendToServer;
buf:=hstr('2F 07 01 00 00 00 00 00 00 00 ');
SendToServer;
end;
end.
3.сабрать лут
var
I,a:integer; s,r:string;
begin
if FromServer and (pck[1]=#$0C)
then begin
buf:=#$04+pck[6]+pck[7]+pck[8]+pck[9]+pck[14]+pck[15]+pck[16]+pck[17]+pck[18]+pck[19]+pck[20]+pck[21]+pck[22]+pck[23]+pck[24]+pck[25]+#$00;
SendToServer;
end;end.

суть скриптав ясна,вскрывать бокс ,если чест то кил чест, и саберать лут в обоих случаях.естественно написал спамагательные скрипты :жрать хп,ультима,тест на наличее рядам чара(если чар то сесть на прадажу д армор точки за-500к с надписью "афк на долго";
эти скрипты я писал буквально час ,а с их некаректной работай не магу справиться чясами.NLObP памаги мне пажжалусто малини скрипт каторый их бы заменял пожалуйсто,а то я уже за-и-пался и за флудился ппц!:)кста если решишся памочь,то мож сможеш и вспамагательные скрипты в 1 сабрать?:)
P.S. серв интерлюдия, ява:(
__________________
http://www.magnum-shoes.ru/
PunkRediska вне форума   Ответить с цитированием
Старый 13.11.2007, 21:59   #74
Гость
 
Сообщений: n/a
По умолчанию Re:

Цитата:
Сообщение от fox
вся фишка чтоб передать ID таргета самонеру через пакетхак,а не через сервер. просто тупой ассист не катит. по твоему куску не видно откуда берется IDAssistTarget.

Добавлено спустя 2 минуты 46 секунд:
даже добавлю что IDAssistTarget надо брать из пакетов клиента командира (а не пакетов сервера).
ID таргета суммонеру никак не передашь.
Управление суммоном идет пакетом RequestActionUse. Суммон аттакует цель в таргете у хозяина, таргет должен быть в зоне видимости. Да и если цель есть в таргете у хозяина, но находится далеко - суммон не идет ее бить.
Соответственно все разговоры о каче с суммонами идут прахом.
  Ответить с цитированием
Старый 13.11.2007, 22:36   #75
Рыцарь
 
Аватар для mks
 
Регистрация: 21.09.2007
Сообщений: 376
Сказал Спасибо: 11
Имеет 218 спасибок в 106 сообщенях
mks пока неопределено
По умолчанию Re: Re:

Цитата:
Сообщение от sem
Цитата:
Сообщение от fox
вся фишка чтоб передать ID таргета самонеру через пакетхак,а не через сервер. просто тупой ассист не катит. по твоему куску не видно откуда берется IDAssistTarget.

Добавлено спустя 2 минуты 46 секунд:
даже добавлю что IDAssistTarget надо брать из пакетов клиента командира (а не пакетов сервера).
ID таргета суммонеру никак не передашь.
Управление суммоном идет пакетом RequestActionUse. Суммон аттакует цель в таргете у хозяина, таргет должен быть в зоне видимости. Да и если цель есть в таргете у хозяина, но находится далеко - суммон не идет ее бить.
Соответственно все разговоры о каче с суммонами идут прахом.
ты не прав, то что сумон атакует цель которая находится в таргете хозяина это все работа клиента, а пакет атаки сумона прост - тупо ИД таргета и его координаты, и пофиг где хозяин. А ид моба и его координаты мы берем от коммандира.
Я со своим скриптом уводил на кач сумона за пол карты от его хозяина
__________________
FA©Q!
mks вне форума   Ответить с цитированием
Старый 14.11.2007, 04:42   #76
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: ДА БУДЕТ БОТ!

Скрипт на бота-мага. Бьет магией, отбегает, подбирает выпавшие предметы.
Можно совместно качать 'Hachling of Star'
Код:
//Бот_маг with 'Hachling of Star' by NLObP
{
Социальное действие YES включить
Социальное действие NO выключить

Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.
}

//******************************************************************************
Const
  Name='NLObP';      //имя чара
  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.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 16.11.2007, 19:54   #77
Гость
 
Сообщений: n/a
По умолчанию Рыбалка

Можете как-нибудь добавить в скрипт для автоматизации рыбалки несколько действий?
1)Если вылазиет моб и атакует (или у перса хп опускаеца ниже определенного уровня), то перц не начинает ловить рыбу а использует оружие (вручную вводится его ИД) и валит моба (или атакующего). Затем снова берет удочку и крючки и возобновляет рыбалку.

Возможно ли такое написать???
Заранее благодарен.
  Ответить с цитированием
Старый 18.11.2007, 04:22   #78
Новичок
 
Регистрация: 07.11.2007
Сообщений: 14
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
PunkRediska
По умолчанию Re: скриптик

Цитата:
Сообщение от zzzz
подскажите пожалуйста, как будет выглядеть скриптик для поднятия определенной вещи с земли(вещь заранее известна), какой командой это делается, а затем, чтоб подняло только что брошенную вещь. Заранее спасибо.
это для 1ной канкретной веши

const name='PunkyBoy';
var
I,a:integer; s,r:string;
begin
if FromServer and (pck[1]=#$0C)and (connectname=name) and (pck[10]+pck[11]+pck[12]+pck[13]=#$39#$00#$00#$00)\\id веши иначе можо записать как readd[10]=hstr('айди');
then
begin
buf:=#$04+pck[6]+pck[7]+pck[8]+pck[9]+pck[14]+pck[15]+pck[16]+pck[17]+pck[18]+pck[19]+pck[20]+pck[21]+pck[22]+pck[23]+pck[24]+pck[25]+#$00;
SendToServerex(name);

end;
end.
__________________
http://www.magnum-shoes.ru/
PunkRediska вне форума   Ответить с цитированием
Старый 20.11.2007, 18:12   #79
Новичок
 
Регистрация: 13.11.2007
Сообщений: 10
Сказал Спасибо: 4
Имеет 1 спасибку в 1 сообщении
maxim22
По умолчанию Рыбалка

Не могу понять в чем проблема.
Поправил Name='Свойник';
Запускию скрипт.
В привате получаю
1 одеть и снять: удочку, крючек!
2 в процессе рыбалки использовать один раз фишин-шот!

Проделываю все эти действия
Получаю в приват
Автоматизация ловли рыбы готово к работе!
пишу 1 в чат= не фурычит
Использую СоцДействие Yes =не фурычит происходит тока СоцДействие Yes

Раскоментировал отладочные сообщения подcчета сосок и крючков и пытаюсь ловить, подсчет ведется.
Проверил ItemID с сервером = совпадают
Не пойму куда рыть, подскажите плиз..
maxim22 вне форума   Ответить с цитированием
Старый 20.11.2007, 23:26   #80
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: Рыбалка

Цитата:
Сообщение от maxim22
Не могу понять в чем проблема.
[skip]
Не пойму куда рыть, подскажите плиз..
Может не в том месте стоял, где ловить можно. Количество шотов и количество крючков верно пишет?
Какой у тебя сервер и какой именно скрипт используешь? В личку пиши.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Ответ

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


Опции темы
Опции просмотра

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

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


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

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

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