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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 20.10.2007, 21:16   #41
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

You do not have enough adena вот такая надпись появляется когда сдаю манор, у кого нет денег у меня или у замка просвитите плиз нуба :)
Grinch вне форума   Ответить с цитированием
Старый 21.10.2007, 01:37   #42
Новичок
 
Регистрация: 21.10.2007
Адрес: MockBa
Сообщений: 1
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
DO12
По умолчанию

Собсно здрасте!)
Я люблю рыбалку... (с) Не помню откуда
Так вот, использую скрипт на рыбалку в таком виде + к ниму скрипт на хилки
Код:
//Автоматизация ловли рыбы by NLObP

//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS"

//Необходимо затариться удочкой и крючками
//выучить соответствующие скиллы
//Социальное действие YES  - начать
//Социальное действие NO  - остановиться
//Enjoy!

//      Disclaimer of Warranty. Unless required by applicable law or
//      agreed to in writing, Licensor provides the Work (and each
//      Contributor provides its Contributions) on an "AS IS" BASIS,
//      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
//      implied, including, without limitation, any warranties or conditions
//      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
//      PARTICULAR PURPOSE. You are solely responsible for determining the
//      appropriateness of using or redistributing the Work and assume any
//      risks associated with Your exercise of permissions under this License.

const
  fish='2F 20 05 00 00 00 00 00 00 00';
  pump='2F 21 05 00 00 00 00 00 00 00';
  reel='2F 22 05 00 00 00 00 00 00 00';

var
  Cmd:String;
  timer1: TTimer;
  status:boolean;
  Attacker, CharID, ObjectID, SocialID, ItemID, CoordX, CoordY, CoordZ: Integer;

procedure Init; //Вызывается при включении скрипта
begin
  ItemID:=0;
  timer1:=TTimer.Create(nil);
  timer1.OnTimer:=@OnTimer1;
  timer1.enabled:=false;
  timer1.interval:=1800; //время задержки
  //SendMsg('Начало ловли рыбы социальное действие Yes');
end;

procedure Free; //Вызывается при выключении скрипта
begin
  timer1.Free;
end;

procedure SendMsg(msg:string);
begin
  buf:=#$4A;
  WriteD(0);
  WriteD(10);
  WriteS('');
  WriteS(msg);
  SendToClient;
end;

procedure TargetAttacker(Attacker: Integer);
begin
    SendMsg('AttackerID='+IntToStr(Attacker)+' PlayerID='+IntToStr(CharID));
    timer1.enabled:=false;
    buf:=#$04;
    WriteD(Attacker);
    WriteD(CoordX);
    WriteD(CoordY);
    WriteD(CoordZ);
    WriteC(00);
   SendToServer;
end;

Procedure SaveCoord;
var
 i: integer;
begin
  //запоминаем свои координаты
  i:=2;
  CoordX:=ReadD(i);
  CoordY:=ReadD(i);
  CoordZ:=ReadD(i);
end;

procedure Fishing;
begin
  buf:=HStr(fish);
  SendToServer;
end;

procedure FishShot;
begin
    buf:=#$14;
    WriteD(ItemID);
    WriteD(00);
    SendToServer;
end;

procedure Pumping;
begin
  FishShot;
  buf:=HStr(pump);
  SendToServer;
end;

procedure Reeling;
begin
  FishShot;
  buf:=HStr(reel);
  SendToServer;
end;

procedure OnTimer1(Sender: TObject);
begin
    Fishing;
    timer1.enabled:=false;
    //SendMsg('Fishing');
end;

//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
  //не обрабатываем пустые пакеты
  if pck='' then exit;
  //****************************************************************************
  //Первым делом включаем Fishing Shot
  if FromServer and (pck[1]=#$27) and (ItemID=0) then begin //idItem'a который мы хотим юзать
    ItemID:=ReadD(8);
  end;
  if FromServer and (pck[1]=#$04) then
    CharID:=ReadD(18);
  if FromClient and (pck[1]=#$1B) then
    begin
      SocialID:=ReadD(2);
      case SocialID of
        //социальное действие Yes для начала ловли
        6:begin
          Status:=true;
          Fishing;
        end;
        //социальное действие No для окончания
        5:begin
          Status:=false;
          timer1.enabled:=false;
        end;
      end;
    end;
    if Status=true then begin
       //MagicSkillUse 48, Attack 05
       if FromServer and ((pck[1]=#$48) or (pck[1]=#$05)) then begin
          Attacker:=ReadD(2);
          ObjectID:=ReadD(6);
       end;
       //пакет ValidatePosition с кординатами
       if FromClient and (pck[1]=#$48) then SaveCoord;
       //Если мы попали в таргет или атакуемся магией
       //if (Attacker<>ObjectID) and (CharID=ObjectID) then TargetAttacker(Attacker);
       //FishinHPRegen
       if FromServer and (pck[1]+pck[2]=#$FE#$16) and (pck[16]=#$00) then Pumping;
       if FromServer and (pck[1]+pck[2]=#$FE#$16) and (pck[16]=#$01) then Reeling;
       //FishingEnd
       if FromServer and (pck[1]+pck[2]=#$FE#$14) then timer1.enabled:=true;
    end
    else exit;
end.
Рыба ловится не взирая на вылезающих мобов, всё казалось бы зашибись, кроме одного, достаточно часто вылезают 2 моба под ряд (Одного моба протягивает простая хилка), и всёб хорошо, грейтер хилка их протягивает, но я ЖАДНЫЙ и мне не хочется трарить денюжки заработаные не честным путём на то, чтоб заробатывать дальше)
Вопрос заключается в следующем: Возможно ли сделать так, чтобы когда значение ХП было ниже максимума, рыба ловиься переставала, и снова начинала при полном восстановлении?
DO12 вне форума   Ответить с цитированием
Старый 21.10.2007, 04:15   #43
Новичок
 
Регистрация: 18.10.2007
Адрес: Москва
Сообщений: 22
Сказал Спасибо: 0
Имеет 8 спасибок в 2 сообщенях
Юля
По умолчанию Re:

Цитата:
Сообщение от Гость
Юля, а для чего нужно к процессу атачиться при посылке нажатия клавиш?
а, не вырезанный момент, SetKeyboardState использовала, а там без пристыковки нельзя. не обрашай внимания.
Юля вне форума   Ответить с цитированием
Старый 21.10.2007, 04:36   #44
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от DO12
Собсно здрасте!)
Я люблю рыбалку... (с) Не помню откуда
Так вот, использую скрипт на рыбалку в таком виде + к ниму скрипт на хилки
Посмотри в этой теме на 1 странице более свежий скрипт на рыбалку. В нем проверяется количество крючков и шотов. В остальном алгоритм тот же.

Цитата:
Рыба ловится не взирая на вылезающих мобов, всё казалось бы зашибись, кроме одного, достаточно часто вылезают 2 моба под ряд (Одного моба протягивает простая хилка), и всёб хорошо, грейтер хилка их протягивает, но я ЖАДНЫЙ и мне не хочется трарить денюжки заработаные не честным путём на то, чтоб заробатывать дальше) Вопрос заключается в следующем: Возможно ли сделать так, чтобы когда значение ХП было ниже максимума, рыба ловиься переставала, и снова начинала при полном восстановлении?
А это вариант для чаров, которые могут сами себя лечить:
Код:
//Автоматизация ловли рыбы by NLObP

//Возможность работы нескольких одновременных скриптов
//Добавлена проверка на кол-во крючков и шотов.
//Доработанная на предмет лечения самого себя

//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" и Protocol 656

//Необходимо затариться удочкой и крючками, шотами
//выучить соответствующие скиллы

//1 одеть и снять: удочку, крючек для определения ObjectID
//2 в процессе рыбалки использовать один раз фишин-шот для определения ObjectID
//3 делаем таргет на себя для лечения

//Социальное действие YES - начать
//Социальное действие NO - остановиться
//Enjoy!

{Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.}

//******************************************************************************
const
  Name='NLObP'; //исправить на имя чара
  heal=1218; //Greater Battle Heal
  fish=1312;
  pump=1313;
  reel=1314;

//******************************************************************************
var
  timer: TTimer;
  TimerHP: TTimer;
  TimerMOB: TTimer;
  status, status2, ScrInUse, UnderAttack: boolean;
  Cmd, Lure, ColvoLure, Shot, ColvoShot, CharObjID: Integer;
  CurMP, MaxMP, MaxHP, CurHP: integer;
//******************************************************************************
//                      Вызывается при включении скрипта
//******************************************************************************
procedure Init;
begin
  Shot:=0;
  UnderAttack:=false;
  Status:=false;     //в процессе рыбалки или нет?
  Status2:=false;   //показывает, что скрипт готов к работе
  ScrInUse:=false; //скрипт отключен
  CharObjID:=0;   //идентификатор ловца

  timer:=TTimer.Create(nil);
  timer.OnTimer:=@OnTimer;
  timer.enabled:=false;
  timer.interval:=10000; //время задержки (сделать достаточно большое, чтобы среагировать на атаку моба)

  timerHP:=TTimer.Create(nil);
  timerHP.OnTimer:=@OnTimerHP;
  timerHP.enabled:=false;
  timerHP.interval:=5000; //время между попытками лечиться

  timerMOB:=TTimer.Create(nil);
  timerMOB.OnTimer:=@OnTimerMOB;
  timerMOB.enabled:=false;
  timerMOB.interval:=60000; //ждем примерно минуту, пока моб нас колбасит

  Say('1 одеть и снять: удочку, крючек!');
  Say('2 в процессе рыбалки использовать один раз фишин-шот!');
  Say('3 сделать таргет на себя для самолечения!');
end;

//******************************************************************************
//                        Вызывается при выключении скрипта
//******************************************************************************
procedure Free;
begin
  timer.Free;
  timerHP.Free;
  timerMOB.Free;
end;

//******************************************************************************
Function ObjtoColvo(ItemObjID:integer): integer;
var
  i: integer;
begin
  if ItemObjID=0 then exit;
  for i:=0 to ReadD(4)-1 do begin
    if ItemObjID=ReadD(i*28+8) then begin
        Result:=ReadD(i*28+16); //количество
        exit;
    end;
  end;
  Result:=0;
end;

//******************************************************************************
procedure InitStats;
var
  i: integer;
begin
  //Запоминаем ИД
  i:=18;
  CharObjID:=ReadD(i);
  //смещение переменное, зависит от имени (LenName*2+2)
  i:=i+(Length(Name)*2+2)+44;
  MaxHP:=ReadD(i);
  CurHP:=ReadD(i);
  MaxMP:=ReadD(i);
  CurMP:=ReadD(i);
  if ScrInUse then begin
    if not UnderAttack then begin
      if (CurHP<MaxHP) then begin
        timer.enabled:=false; //выключаем задержку между забросами
        Status:=false;
        TimerHP.enabled:=true;
        TimerMOB.enabled:=true;
        UnderAttack:=true;
      end
      else begin
        if status=false then begin
          TimerHP.enabled:=false;
          timer.enabled:=true; //включаем задержку между забросами
        end;
      end;
    end;
  end;
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);
      #$0B: CurMP:=ReadD(i*8+14);
      #$0C: MaxMP:=ReadD(i*8+14);
    end;
  end;
  if ScrInUse then begin
    if not UnderAttack then begin
      if (CurHP<MaxHP) then begin
        timer.enabled:=false; //выключаем задержку между забросами
        Status:=false;
        TimerHP.enabled:=true;
        TimerMOB.enabled:=true;
        UnderAttack:=true;
      end
      else begin
        if status=false then begin
          TimerHP.enabled:=false;
          timer.enabled:=true; //включаем задержку между забросами
        end;
      end;
    end;
  end;
end;

//******************************************************************************
procedure OnTimer(Sender: TObject);
begin
    timer.enabled:=false; //выключаем задержку между забросами
    status:=true;
    Fishing;
end;

//******************************************************************************
procedure OnTimerMOB(Sender: TObject);
begin
    UnderAttack:=false;
end;

//******************************************************************************
procedure OnTimerHP(Sender: TObject);
begin
//   timerMOB.enabled:=true; //ждем примерно минуту, пока моб нас колбасит
   //таргет на себя надо делать! Можно заранее на себя таргет сделать.
   if (CurHP<MaxHP) then MagicSkillUse(heal); //каждые 10 сек лечимся, пока моб нас бъет в тесении 60 сек
end;

//******************************************************************************
procedure Fishing;
begin
  if ColvoLure<>0 then MagicSkillUse(fish)
  else begin
    Status:=false;
    ScrInUse:=false;
    Say('Кончились крючки!');
  end;
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 UseItem(ObjID:integer);
begin
    buf:=#$14;
    WriteD(ObjID);
    WriteD(00);
    SendToServerEx(Name);
end;

//******************************************************************************
//посылаем сообщение, которое видно только в окне бота
//можно использовать для отладки
procedure Say(msg:string);
begin
  buf:=hstr('4A 00 00 00 00');
  WriteD(2);
  WriteS(Name);
  WriteS(msg);
  SendToClientEx(Name);
end;

//******************************************************************************
procedure Pumping;
begin
  if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
  MagicSkillUse(pump);
end;

//******************************************************************************
procedure Reeling;
begin
  if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
  MagicSkillUse(reel);
end;

//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
  //не обрабатываем пустые пакеты
  if pck='' then exit;

  //****************************************************************************
  //если от сервака принят пакет с UserInfo. Запоминаем собственный ИД
  if FromServer and (ConnectName=Name) and (pck[1]=#$04) then CharObjID:=ReadD(18);

  //****************************************************************************
  {необходимо уточнить ItemID для своего сервера!!!
  6519=Green Colored Lure - Low Grade
  6520=Green Colored Lure - Medium Grade
  6521=Green Colored Lure - High Grade
  6522=Purple Colored Lure - Low Grade
  6523=Purple Colored Lure - Medium Grade
  6524=Purple Colored Lure - High Grade
  6525=Yellow Colored Lure - Low Grade
  6526=Yellow Colored Lure - Medium Grade
  6527=Yellow Colored Lure - High Grade}
  //InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
  //запоминаем ObjectID Lure и ColvoLure
  if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6519) and (ReadD(12)<=6527)) then
  begin
     Lure:=ReadD(8);
     ColvoLure:=ReadD(16); //количество крючков
  end;

  //****************************************************************************
  {необходимо уточнить ItemID для своего сервера!!!
  6535=Fishing Shot: non-grade
  6536=Fishing Shot: D-grade
  6537=Fishing Shot: C-grade
  6538=Fishing Shot: B-grade
  6539=Fishing Shot: A-grade
  6540=Fishing Shot: S-grade}
  //InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
   //запоминаем ObjectID Fishing Shot и ColvoShot
  if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6535) and (ReadD(12)<=6540)) then
  begin
     Shot:=ReadD(8);
     ColvoShot:=ReadD(16); //количество шотов
  end;

  //******************************************************************************
  if (CharObjID<>0) and (ColvoLure<>0) and not status2 then
  begin
    Say('Автоматизация ловли рыбы готово к работе!');
    status2:=true;
  end;

  //******************************************************************************
  //ItemList
  if FromServer and (ConnectName=Name) and (pck[1]=#$1B) and status then
  begin
     ColvoShot:=ObjtoColvo(Shot); //количество шотов
     ColvoLure:=ObjtoColvo(Lure); //количество крючков
  end;
  //****************************************************************************
  //ловим рыбу
  if Status and FromServer and (ConnectName=Name) and (CharObjID<>0) then
  begin
       //FishingEnd
       if (pck[1]+pck[2]=#$FE#$14) and (CharObjID=ReadD(4)) then begin
         timer.enabled:=true; //ждем N секунд межде рыбалками
       end;
       //FishinHPRegen
       if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$00) then pumping;
       if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$01) then reeling;
  end;

  //******************************************************************************
  //UserInfo
  if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;

  //******************************************************************************
  //StatusUpdate
  if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;

  //****************************************************************************
  if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
    Cmd:=ReadD(2);
    case cmd of
      //социальное действие Yes для начала ловли
      6: begin
         if CharObjID=0 then exit;
         ScrInUse:=true;
         Status:=true;
         Fishing;
     end;
      //социальное действие No для окончания
      5: begin
         if CharObjID=0 then exit;
         if Status then Fishing;
         ScrInUse:=false;
         Status:=false;
         timer.enabled:=false;
      end;
    end;
  end;
end.
ЗЫЖ
Проблемный момент прервать рыбную ловлю, когда тебя атакуют. :( Поэтому в этом скрипте предполагаем, что моб атакует в промежутке между рыбалками. Время между забросами нужно делать достаточным, чтобы заметить атаку моба. Выжидаем минуту с попытками самолечения и ловим снова. На 100% отладить не могу, в реале я ловлю гномом. Замечания, поправки приветствуются.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 21.10.2007, 10:22   #45
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

я рыбачу гладом в БВ хеви на шок2 самая проблема даже 1 моб когда серв лагает хилки не работают. ЗЫ что б эфективний хилится тайминг на 1000 ставить надо. я этот скрипт юзаю для кача :) просто качал сполера и устал хилки кушать поставил на автомат и кач попёр. интересно в какой линейки автохил сделают как автососки :).
ЗЫ думаю приерепить к гладу хилера, и как рас твой скриптик мне в этом поможет. т.к. не хочу юзать хил пока не исчезнет моб или пока хп глада не упадёт до 1,5к. если сделаю выложу тут.
Grinch вне форума   Ответить с цитированием
Старый 21.10.2007, 14:56   #46
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

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


NLObP вне форума   Ответить с цитированием
Старый 23.10.2007, 23:29   #47
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: ДА БУДЕТ БОТ!

Внес изменения в рыбалку для работы на Интерлюде. Пробуйте.

Код:
//Автоматизация ловли рыбы для Interlude by NLObP
//возможность нескольких одновременных скриптов
//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" и Protocol 656

//Изменения для работы на Интерлюде

//Необходимо затариться удочкой и крючками, шотами
//выучить соответствующие скиллы
//1 одеть и снять: удочку, крючек, мечь, щит для определения ObjectID
//2 в процессе рыбалки использовать один раз фишин-шот для определения ObjectID

//Социальное действие YES - начать
//Социальное действие NO - остановиться

//Enjoy!

{Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.}

const
  Name='NLObP'; //изменить на имя чара

  fish=1312;
  pump=1313;
  reel=1314;

var
  timer: TTimer;
  status, status2, RodInUse: boolean;
  Lure, ColvoLure, Shot, ColvoShot, CharObjID: Integer;
  SocialID: Integer;
  Cmd:string;

//******************************************************************************
//
//******************************************************************************
procedure Init; //Вызывается при включении скрипта
begin
  Shot:=0;
  Status:=false;
  Status2:=false;
  RodInUse:=false;

  timer:=TTimer.Create(nil);
  timer.OnTimer:=@OnTimer;
  timer.enabled:=false;
  timer.interval:=5000; //время задержки
  Say('1 одеть и снять: удочку, крючек, мечь, щит для определения ObjectID!');
  Say('2 в процессе рыбалки использовать один раз фишин-шот для определения ObjectID!');

end;

//******************************************************************************
//
//******************************************************************************
procedure Free; //Вызывается при выключении скрипта
begin
  timer.Free;
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 UseItem(ObjID:integer);
begin
    buf:=#$14;
    WriteD(ObjID);
    WriteD(00);
    SendToServerEx(Name);
end;

//******************************************************************************
//посылаем сообщение, которое видно только в окне бота
//можно использовать для отладки
procedure Say(msg:string);
begin
  buf:=hstr('4A 00 00 00 00');
  WriteD(2);
  WriteS(Name);
  WriteS(msg);
  SendToClientEx(Name);
end;

//******************************************************************************
procedure Fishing;
begin
  if ColvoLure<>0 then MagicSkillUse(fish)
  else begin
    Status:=false;
    RodInUse:=false;
    Say('Кончились крючки!');
  end;
end;

//******************************************************************************
procedure Pumping;
begin
  if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
  MagicSkillUse(pump);
end;

//******************************************************************************
procedure Reeling;
begin
  if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
  MagicSkillUse(reel);
end;

//******************************************************************************
//ItemList - Interlude
{
1 1      writeC(0x1B);
2 2      writeH(_showWindow ? 1 : 0);

4 2      writeH(_items.length);
      for(L2ItemInstance temp : _items)

6 2         writeH(temp.getItem().getType1()); // item type1
8 4         writeD(temp.getObjectId());
12 4         writeD(temp.getItemId());
16 4         writeD(temp.getCount());
20 2         writeH(temp.getItem().getType2()); // item type2
22 2         writeH(temp.getCustomType1()); // item type3
24 2         writeH(temp.isEquipped() ? 1 : 0);
26 4         writeD(temp.getItem().getBodyPart()); // rev 415  slot    0006-lr.ear  0008-neck  0030-lr.finger  0040-head  0080-??  0100-l.hand  0200-gloves  0400-chest  0800-pants  1000-feet  2000-??  4000-r.hand  8000-r.hand
30 2         writeH(temp.getEnchantLevel()); // enchant level
         //race tickets
32 2         writeH(temp.getCustomType2()); // item type3
34 4         writeD(0); // augmentation id
38 4         writeD(temp.getLifeTimeRemaining()); // shadow weapon life time
42
}
Function ObjtoColvoIL(ItemObjID:integer): integer;
var
  i: integer;
begin
  if ItemObjID=0 then exit;
  for i:=0 to ReadD(4)-1 do begin
    if ItemObjID=ReadD(i*36+8) then begin
        Result:=ReadD(i*36+16); //количество
        exit;
    end;
  end;
  Result:=0;
end;

//ItemList - C4
{
1 1    writeC(0x1b);
2 2    writeH(0x01);
4 2    writeH(count);
    for (L2ItemInstance temp : _items)
6  2      writeH(temp.getItem().getType1()); // item type1
8  4      writeD(temp.getObjectId());
12 4      writeD(temp.getItemId());
16 4      writeD(temp.getCount());
20 2      writeH(temp.getItem().getType2());  // item type2
22 2      writeH(temp.getCustomType1());  // item type3
24 2      writeH(0x01);
26 4      writeD(temp.getItem().getBodyPart());  // rev 415  slot    0006-lr.ear  0008-neck  0030-lr.finger  0040-head  0080-??  0100-l.hand  0200-gloves  0400-chest  0800-pants  1000-feet  2000-??  4000-r.hand  8000-r.hand
30 2      writeH(temp.getEnchantLevel());  // enchant level
          //race tickets
32 2      writeH(temp.getCustomType2());  // item type3
}
Function ObjtoColvoC4(ItemObjID:integer): integer;
var
  i: integer;
begin
  if ItemObjID=0 then exit;
  for i:=0 to ReadD(4)-1 do begin
    if ItemObjID=ReadD(i*28+8) then begin
        Result:=ReadD(i*28+16); //количество
        exit;
    end;
  end;
  Result:=0;
end;

//******************************************************************************
procedure OnTimer(Sender: TObject);
begin
    Fishing;
    timer.enabled:=false;
end;

//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
  //не обрабатываем пустые пакеты
  if pck='' then exit;

  //****************************************************************************
  //если от сервака принят пакет с UserInfo. Запоминаем собственный ИД
  if FromServer and (ConnectName=Name) and (pck[1]=#$04) then CharObjID:=ReadD(18);

  //****************************************************************************
  {необходимо уточнить ItemID для своего сервера!!!
  6519=Green Colored Lure - Low Grade A
  6520=Green Colored Lure - Medium Grade
  6521=Green Colored Lure - High Grade
  6522=Purple Colored Lure - Low Grade
  6523=Purple Colored Lure - Medium Grade
  6524=Purple Colored Lure - High Grade
  6525=Yellow Colored Lure - Low Grade
  6526=Yellow Colored Lure - Medium Grade
  6527=Yellow Colored Lure - High Grade}
  //InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
  //запоминаем ObjectID Lure и ColvoLure
  if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6519) and (ReadD(12)<=6527)) then begin
     Lure:=ReadD(8);
     ColvoLure:=ReadD(16); //количество крючков
     //Say('Крючков='+inttostr(ColvoLure));
  end;

  //****************************************************************************
  {необходимо уточнить ItemID для своего сервера!!!
  6535=Fishing Shot: non-grade
  6536=Fishing Shot: D-grade
  6537=Fishing Shot: C-grade
  6538=Fishing Shot: B-grade
  6539=Fishing Shot: A-grade
  6540=Fishing Shot: S-grade}
  //InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
  //запоминаем ObjectID Fishing Shot и ColvoShot
  if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6535) and (ReadD(12)<=6540)) then begin
     Shot:=ReadD(8);
     ColvoShot:=ReadD(16); //количество шотов
     //Say('Шотов='+inttostr(ColvoShot));
  end;

  //****************************************************************************
  if (CharObjID<>0) and (ColvoLure<>0) and not status2 then begin //(Shot<>0) and (ColvoShot<>0) and
    Say('Автоматизация ловли рыбы готово к работе!');
    status2:=true;
  end;

  //******************************************************************************
  //ItemList (1B)
  if FromServer and (ConnectName=Name) and (pck[1]=#$1B) and status then begin
     ColvoShot:=ObjtoColvoIL(Shot); //количество шотов
     //Say('Shot='+inttostr(ColvoShot));
     ColvoLure:=ObjtoColvoIL(Lure); //количество крючков
     //Say('Lure='+inttostr(ColvoLure));
  end;

  //****************************************************************************
  //ловим рыбу
  if Status and FromServer and (ConnectName=Name) and (CharObjID<>0) then begin
       //FishingEnd
       if (pck[1]+pck[2]=#$FE#$14) and (CharObjID=ReadD(4)) then timer.enabled:=true; //FishingEnd ждем N секунд межде рыбалками
       //FishinHPRegen
       if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$00) then pumping;
       if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$01) then reeling;
  end;

  //****************************************************************************
  if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
    SocialID:=ReadD(2);
    case SocialID of
      //социальное действие Yes для начала ловли
      6: begin
            if CharObjID=0 then exit;
            Status:=true;
            RodInUse:=true;
            Fishing;
      end;
      //социальное действие No для окончания
      5: begin
            if CharObjID=0 then exit;
            if Status and RodInUse then Fishing;
            Status:=false;
            RodInUse:=false;
            timer.enabled:=false;
      end;
    end;
  end;
end.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 25.10.2007, 00:38   #48
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: плиз

Цитата:
Сообщение от воВа
друг луче б ты авто заточку для интерлюди сделал
Она точно такая же как и та, что здесь на форуме. Измени только смещение в
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
с j:=j+2;
на j:=j+10;

и в
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
с j:=j+2;
на j:=j+10;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 26.10.2007, 18:20   #49
Рыцарь
 
Аватар для QaK
 
Регистрация: 28.09.2007
Сообщений: 1,558
Сказал Спасибо: 71
Имеет 351 спасибок в 244 сообщенях
QaK пока неопределено
По умолчанию

Ворон, есть предложение все скрипты засунуть в архив, а в первом посту оставить так:
Условное название скрипта - автор (краткое описание)
Например:
1)BOT GNOM SPOILER - VORON
(ДЛЯ АДАПТАЦИИ: NICK- переправить в имя чара бота.
PCK[24] заменить на PCK[xx] в зависимости от того сколько символов в нике персонажа
который будет управлять ботом pck[24]- для имен состоящих из 6 символов.
если ваш главный персонаж 5 символов в нике то будет pck[22], если 6 то pck[24]
если 7 то pck[26], если 8 pck[28] и т.д.
ДЛЯ РАБОТЫ СКРИПТА: БОТ- лидер пати, ГЛАВНЫЙ ПЕРС (командир) - на первом месте в пати после бота
кнопки управления пишутся в ПАТИ ЧАТ
ДЛЯ УПРАВЛЕНИЯ:
цифра 1 в пати чат - означет бежать за командиром
цифра 2 в пати чат - атакавать и спойлить врага по ассисту с коммандиром
свип после смерти моба происходит- автоматически при условии что ТРУП- в таргете у командира)

а то задралось ждать, пока загрузится весь пост.
QaK вне форума   Ответить с цитированием
Старый 26.10.2007, 20:43   #50
Рыцарь
 
Аватар для Grinch
 
Регистрация: 29.02.2008
Сообщений: 928
Сказал Спасибо: 127
Имеет 130 спасибок в 93 сообщенях
Grinch пока неопределено
По умолчанию

подерживаю а то жесть какая то, не во всех городах и сёлах россии есть быстрый и дешовый интернет
Grinch вне форума   Ответить с цитированием
Ответ

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


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

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

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


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

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

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