Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Автоточка на Epilogue

-

Архив

- Архив Lineage 2 - собрание неактуальных на данный момент тем. Может быть полезен для изучения истории

 
 
Опции темы
Старый 05.05.2010, 17:30   #1
 Пехотинец
Аватар для Anizida
 
Anizida скоро будет известенAnizida скоро будет известенAnizida скоро будет известенAnizida скоро будет известенAnizida скоро будет известен
Регистрация: 13.04.2009
Сообщений: 75
Популярность: 451
Сказал(а) спасибо: 18
Поблагодарили 146 раз(а) в 63 сообщениях
Отправить сообщение для Anizida с помощью ICQ
 
По умолчанию Автоточка на Epilogue

Полазил по форуму, но так не чего и не нашел.

Реально ли сейчас на Финале/Эпилоге организовать автоточку? То есть ты уходишь спать, а у тебя точит оружие до определенного уровня? В моем случае 45.
Если то реально, просьба разжевать как и что, вместе с пакетом для L2phx, в случае если разберемся, готов оформить статью.

Именно сервер vlineage.ru

Заранее спасибо.

Последний раз редактировалось Anizida; 05.05.2010 в 17:34.
 
Старый 05.05.2010, 17:38   #2
Почетный Пользователь
 Капитан
Аватар для ExxtanzO
 
ExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского СоюзаExxtanzO трижды герой Советского Союза
Регистрация: 21.12.2009
Сообщений: 251
Популярность: 6587
Золото Zhyk.Ru: 30
Сказал(а) спасибо: 223
Поблагодарили 533 раз(а) в 200 сообщениях
Отправить сообщение для ExxtanzO с помощью ICQ Отправить сообщение для ExxtanzO с помощью Skype™
 
По умолчанию Re: Автоточка на Epilogue

Этот скрипт работал очень хорошо, сейчас не знаю, пробуй

Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP для Грации + v0ltag3's fix for GF(alpha)
//version 0.8beta от 19.07.2009г.
program Enchant_gracia;
{********************************************************************************
Возможности скрипта:
--------------------
- Панель управления;
- Затачиваем по очереди все предметы с ItemID пока не переломаем
  или не заточим, один предмет всегда остаётся;

====================================================================
Работа скрипта проверялась на локальном Грация сервере
====================================================================

1) Необходимо затариться оружием, заточками и валерьянкой.
2) Вписать в константу Name имя своего чара.
3) Поставить количество слотов в инвентаре чара в константу maxitems.
4) Сохранить и запустить скрипт установив напротив него галочку.

Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей,
степень заточки значения не имеет.

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

//............................................
//Список констант
const
  Name='Nick'; //Вписать сюда имя чара
  //установить константу в зависимости от типа игры (С4 или Интерлюд)
  //-------------------------
  maxitems=80;     //количество слотов в инвентаре чара
  debug=false;  //если не хотим видеть отладочной информации

//............................................
//Список переменных
var
  flag7C,flagFE,flag87,useitems:boolean;
  Item, scrl: integer;
  ScrollID, ScrollOID: integer;  //ScrollID скролла заточки
  ItemID, ItemOID, ItemEnch: integer;      //ItemID затачиваемого предмета
  MaxEnchLvl: integer;         //уровень заточки который требуется достичь
  //ITEMs
  BaseItems:  array[1..maxitems, 1..12] of longint;  //все предметы в инвентаре

  StartTime, EndTime: TDateTime;
  good, broken: integer;
  ready: boolean;
  timer, showinf : TTimer;
  ItemCount, CurEnchLvl: integer;
  ItemsName, StringList : TStringList;  //названия предметов, имена продавцов
  FormMain : TForm; //Создаваемая форма
  Splitter1, Splitter2 : TSplitter;
  Stats, Msg : TMemo;
  Panel1 : TPanel;
  GroupBox2 : TGroupBox;
  Label1, Label2, Label3, Label4, Label12, Label13 : TLabel;
  ComboBoxItem, ComboBoxScroll : TComboBox;
  CheckBoxItem, CheckBoxScroll : TCheckBox;
  ButtonStartEnchant, ButtonStopEnchant : TButton;
  EditItemVal, EditScrollVal, EditScrollOID, EditItemOID, Edit1, Edit2 : TEdit;
//............................................
//*************************************
//Обработчики событий для элементов управления на форме
//......................................
//CheckBoxItem
procedure CheckBoxItem_Click(Sender: TCheckBox);
//Event : OnClick
begin
  if CheckBoxItem.Checked
  then begin
    ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
    ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
    //проверка
//    EditItemOID.Text:=Inttostr(ItemID);
//    EditItemVal.text:=inttostr(ItemOID);

    ComboBoxItem.Enabled:=false; //выключаем
  end else begin
    ItemID:=0;               //отмена
    ItemOID:=0;
    ComboBoxItem.Enabled:=true;  //включаем
    //RequestItemList вызываем инвентарь
    buf:=hstr('14');
    SendToServerEx(Name);
  end;
end;
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
//Event : OnClick
begin
    ItemOID:=BaseItems[ComboBoxItem.ItemIndex+1,2];
    ItemID:=BaseItems[ComboBoxItem.ItemIndex+1,3];
//    ItemID:=ExtractIDValues(ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]);
    EditItemOID.Text:=Inttostr(ItemID);
    EditItemVal.text:=inttostr(sumitem(ItemID));
end;
//......................................
//......................................
//CheckBoxScroll
procedure CheckBoxScroll_Click(Sender: TCheckBox);
//Event : OnClick
begin
  if CheckBoxScroll.Checked
  then begin
    ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
    ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
    //проверка
//    EditScrollOID.Text:=Inttostr(ScrollID);
//    EditScrollVal.text:=inttostr(ScrollOID);
    ComboBoxScroll.Enabled:=false; //выключаем
  end else begin
    ScrollID:=0;               //отмена
    ScrollOID:=0;
    ComboBoxScroll.Enabled:=true;  //включаем
    //RequestItemList вызываем инвентарь
    buf:=hstr('14');
    SendToServerEx(Name);
  end;
end;
//......................................
//......................................
//ComboBoxScroll
procedure ComboBoxScroll_Click(Sender: TComboBox);
//Event : OnClick
begin
    ScrollOID:=BaseItems[ComboBoxScroll.ItemIndex+1,2];
    ScrollID:=BaseItems[ComboBoxScroll.ItemIndex+1,3];
//    ScrollID:=ExtractIDValues(ComboBoxScroll.Items.Strings[ComboBoxScroll.ItemIndex]);
    EditScrollOID.Text:=Inttostr(ScrollID);
    EditScrollVal.text:=inttostr(sumitem(ScrollID));
end;
//......................................
//......................................
//ButtonStartEnchant
procedure ButtonStartEnchant_Click(Sender: TButton);
//Event : OnClick
begin
  CurEnchLvl:=0;
  Edit2.text:=inttostr(CurEnchLvl);
  msg.Lines.Add('Команда Старт!!!');
  timer.enabled:=true;
end;
//......................................
//......................................
//ButtonStopEnchant
procedure ButtonStopEnchant_Click(Sender: TButton);
//Event : OnClick
begin
  msg.Lines.Add('Команда Стоп!!!');
  timer.enabled:=false;
  ready:=false;
end;
//......................................
//......................................
procedure Edit1_Exit(Sender: TEdit);
//Event : OnExit
begin
//  MyHPID:=ExtractIDValues(ComboBoxHPotion.Items.Strings[ComboBoxHPotion.ItemIndex]);
//  EditHPotionVal.Text:=Inttostr(FindItem(MyHPID));
//  EditHPotionOID.text:=inttostr(ItemBase2[1,1]);
end;
//......................................
//*************************************
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
  TRY
    if FormMain<>NIL then begin
       FormMain.Free;
       FormMain:=NIL;
    end;
  FINALLY
  END;
end; //Free_FormMain
//========================
//========================
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
  Yes : boolean;
begin
  Yes := FALSE;
  Result := TForm.Create(nil);

  TRY
    //------------------------
    //Свойства формы
    Result.Caption     := 'Enchant by NLObP+v0ltag3s fix for GF v.0.8b';
    Result.Left        := 397;
    Result.Top         := 233;
    Result.Width       := 581;
    Result.Height      := 205;
    Result.FormStyle   := fsNormal;
    Result.Position    := poDesigned;
    Result.BorderStyle := bsSizeable;
    Result.BorderWidth := 0;
    Result.WindowState := wsNormal;
    Result.Color       := clBtnFace;
    Result.Font.Name   := 'Tahoma';
    Result.Font.Size   := 8;
    Result.Font.Color  := clWindowText;
    Result.Font.CharSet:= 1;
    //------------------------
    //......................................
    //Splitter1
    Splitter1 := TSplitter.Create(Result);
    Splitter1.Parent := Result;
    Splitter1.Align := alBottom;
    Splitter1.Color := clBtnFace;
    Splitter1.Left    := 0;
    Splitter1.Top     := 103;
    Splitter1.Width   := 573;
    Splitter1.Height  := 3;
    Splitter1.Visible := TRUE;
    Splitter1.Tag     := 0;
    //......................................
    //......................................
    //Splitter2
    Splitter2 := TSplitter.Create(Result);
    Splitter2.Parent := Result;
    Splitter2.Align := alRight;
    Splitter2.Color := clBtnFace;
    Splitter2.Left    := 442;
    Splitter2.Top     := 0;
    Splitter2.Width   := 1;
    Splitter2.Height  := 103;
    Splitter2.Visible := TRUE;
    Splitter2.Tag     := 0;
    //......................................
    //......................................
    //Stats
    Stats := TMemo.Create(Result);
    Stats.Parent := Result;
    Stats.Left    := 443;
    Stats.Top     := 0;
    Stats.Width   := 130;
    Stats.Height  := 103;
    Stats.Visible := TRUE;
    Stats.Tag     := 0;
    Stats.Enabled  := TRUE;
    Stats.Hint     := '';
    Stats.ShowHint := FALSE;
    Stats.Font.Name  := 'Tahoma';
    Stats.Font.Size  := 8;
    Stats.Font.Color := clWindowText;
    Stats.Color         := clWindow;
    Stats.TabOrder      := 0;
    Stats.TabStop       := TRUE;
    Stats.Align         := alRight;
    Stats.WordWrap      := TRUE;
    Stats.Alignment     := taLeftJustify;
    Stats.WantTabs      := FALSE;
    Stats.WantReturns   := TRUE;
    Stats.HideSelection := TRUE;
    Stats.MaxLength     := 0;
    Stats.OEMConvert    := FALSE;
    Stats.ReadOnly      := FALSE;
    Stats.ScrollBars    := ssNone;
    //......................................
    //......................................
    //Msg
    Msg := TMemo.Create(Result);
    Msg.Parent := Result;
    Msg.Left    := 0;
    Msg.Top     := 106;
    Msg.Width   := 573;
    Msg.Height  := 65;
    Msg.Visible := TRUE;
    Msg.Tag     := 0;
    Msg.Enabled  := TRUE;
    Msg.Hint     := '';
    Msg.ShowHint := FALSE;
    Msg.Font.Name  := 'Tahoma';
    Msg.Font.Size  := 8;
    Msg.Font.Color := clWindowText;
    Msg.Color         := clWindow;
    Msg.TabOrder      := 1;
    Msg.TabStop       := TRUE;
    Msg.Align         := alBottom;
    Msg.WordWrap      := TRUE;
    Msg.Alignment     := taLeftJustify;
    Msg.WantTabs      := FALSE;
    Msg.WantReturns   := TRUE;
    Msg.HideSelection := TRUE;
    Msg.MaxLength     := 0;
    Msg.OEMConvert    := FALSE;
    Msg.ReadOnly      := FALSE;
    Msg.ScrollBars    := ssNone;
    //......................................
    //......................................
    //Panel1
    Panel1 := TPanel.Create(Result);
    Panel1.Parent := Result;
    Panel1.Left    := 0;
    Panel1.Top     := 0;
    Panel1.Width   := 442;
    Panel1.Height  := 103;
    Panel1.Visible := TRUE;
    Panel1.Tag     := 0;
    Panel1.Enabled  := TRUE;
    Panel1.Hint     := '';
    Panel1.ShowHint := FALSE;
    Panel1.Caption    := '';
    Panel1.Align      := alClient;
    Panel1.Color      := clBtnFace;
    Panel1.Font.Name  := 'Tahoma';
    Panel1.Font.Size  := 8;
    Panel1.Font.Color := clWindowText;
    Panel1.Font.CharSet := 1;
    Panel1.BevelWidth   := 1;
    Panel1.BorderWidth  := 0;
    Panel1.BevelInner   := bvNone;
    Panel1.BevelOuter   := bvRaised;
    Panel1.TabOrder     := 2;
    Panel1.TabStop      := FALSE;
    Panel1.AutoSize     := FALSE;
    //......................................
    //......................................
    //GroupBox2
    GroupBox2 := TGroupBox.Create(Result);
    GroupBox2.Parent := Panel1;
    GroupBox2.Left    := 1;
    GroupBox2.Top     := 1;
    GroupBox2.Width   := 440;
    GroupBox2.Height  := 101;
    GroupBox2.Visible := TRUE;
    GroupBox2.Tag     := 0;
    GroupBox2.Enabled  := TRUE;
    GroupBox2.Hint     := '';
    GroupBox2.ShowHint := FALSE;
    GroupBox2.Caption    := 'Настройки';
    GroupBox2.Align      := alClient;
    GroupBox2.Color      := clBtnFace;
    GroupBox2.Font.Name  := 'Tahoma';
    GroupBox2.Font.Size  := 8;
    GroupBox2.Font.Color := clWindowText;
    GroupBox2.Font.CharSet := 1;
    GroupBox2.TabOrder     := 0;
    GroupBox2.TabStop      := FALSE;
    //......................................
    //......................................
    //Label1
    Label1 := TLabel.Create(Result);
    Label1.Parent := GroupBox2;
    Label1.Left    := 10;
    Label1.Top     := 70;
    Label1.Width   := 58;
    Label1.Height  := 13;
    Label1.Visible := TRUE;
    Label1.Tag     := 0;
    Label1.Enabled  := TRUE;
    Label1.Hint     := '';
    Label1.ShowHint := FALSE;
    Label1.Caption     := 'Уровень Макс.:';
    Label1.Transparent := TRUE;
    Label1.WordWrap    := FALSE;
    Label1.Alignment   := taLeftJustify;
    Label1.Layout      := tlTop;
    Label1.AutoSize    := TRUE;
    Label1.Align       := alNone;
    Label1.Font.Name   := 'Tahoma';
    Label1.Font.Size   := 8;
    Label1.Font.Color  := clWindowText;
    Label1.Color       := clBtnFace;
    //......................................
    //......................................
    //Label1
    Label3 := TLabel.Create(Result);
    Label3.Parent := GroupBox2;
    Label3.Left    := 170;
    Label3.Top     := 70;
    Label3.Width   := 58;
    Label3.Height  := 13;
    Label3.Visible := TRUE;
    Label3.Tag     := 0;
    Label3.Enabled  := TRUE;
    Label3.Hint     := '';
    Label3.ShowHint := FALSE;
    Label3.Caption     := 'Мин.:';
    Label3.Transparent := TRUE;
    Label3.WordWrap    := FALSE;
    Label3.Alignment   := taLeftJustify;
    Label3.Layout      := tlTop;
    Label3.AutoSize    := TRUE;
    Label3.Align       := alNone;
    Label3.Font.Name   := 'Tahoma';
    Label3.Font.Size   := 8;
    Label3.Font.Color  := clWindowText;
    Label3.Color       := clBtnFace;
    //......................................
    //......................................
    //Edit1
    Edit1 := TEdit.Create(Result);
    Edit1.Parent := GroupBox2;
    Edit1.Left    := 90;
    Edit1.Top     := 67;
    Edit1.Width   := 60;
    Edit1.Height  := 21;
    Edit1.Visible := TRUE;
    Edit1.Tag     := 0;
    Edit1.Enabled  := TRUE;
    Edit1.Hint     := 'Введи желаемый уровень улучшения';
    Edit1.ShowHint := TRUE;
    Edit1.Text       := '65535';
    Edit1.Font.Name  := 'Tahoma';
    Edit1.Font.Size  := 8;
    Edit1.Font.Color := clWindowText;
    Edit1.Color        := clWindow;
    Edit1.TabOrder     := 5;
    Edit1.TabStop      := TRUE;
    Edit1.ReadOnly     := FALSE;
    Edit1.MaxLength    := 0;
    Edit1.AutoSize     := TRUE;
    Edit1.OnExit     := @Edit1_Exit;
    //......................................
    //......................................
    //Edit2
    Edit2 := TEdit.Create(Result);
    Edit2.Parent := GroupBox2;
    Edit2.Left    := 199;
    Edit2.Top     := 67;
    Edit2.Width   := 60;
    Edit2.Height  := 21;
    Edit2.Visible := TRUE;
    Edit2.Tag     := 0;
    Edit2.Enabled  := TRUE;
    Edit2.Hint     := 'Какого уровня смогли достичь';
    Edit2.ShowHint := TRUE;
    Edit2.Text       := '0';
    Edit2.Font.Name  := 'Tahoma';
    Edit2.Font.Size  := 8;
    Edit2.Font.Color := clWindowText;
    Edit2.Color        := clWindow;
    Edit2.TabOrder     := 5;
    Edit2.TabStop      := FALSE;
    Edit2.ReadOnly     := TRUE;
    Edit2.MaxLength    := 0;
    Edit2.AutoSize     := TRUE;
    //......................................
    //......................................
    //Label2
    Label2 := TLabel.Create(Result);
    Label2.Parent := GroupBox2;
    Label2.Left    := 416;
    Label2.Top     := 19;
    Label2.Width   := 18;
    Label2.Height  := 13;
    Label2.Visible := TRUE;
    Label2.Tag     := 0;
    Label2.Enabled  := TRUE;
    Label2.Hint     := '';
    Label2.ShowHint := FALSE;
    Label2.Caption     := 'шт.';
    Label2.Transparent := TRUE;
    Label2.WordWrap    := FALSE;
    Label2.Alignment   := taLeftJustify;
    Label2.Layout      := tlTop;
    Label2.AutoSize    := TRUE;
    Label2.Align       := alNone;
    Label2.Font.Name   := 'Tahoma';
    Label2.Font.Size   := 8;
    Label2.Font.Color  := clWindowText;
    Label2.Color       := clBtnFace;
    //......................................
    //......................................
    //Label4
    Label4 := TLabel.Create(Result);
    Label4.Parent := GroupBox2;
    Label4.Left    := 416;
    Label4.Top     := 43;
    Label4.Width   := 18;
    Label4.Height  := 13;
    Label4.Visible := TRUE;
    Label4.Tag     := 0;
    Label4.Enabled  := TRUE;
    Label4.Hint     := '';
    Label4.ShowHint := FALSE;
    Label4.Caption     := 'шт.';
    Label4.Transparent := TRUE;
    Label4.WordWrap    := FALSE;
    Label4.Alignment   := taLeftJustify;
    Label4.Layout      := tlTop;
    Label4.AutoSize    := TRUE;
    Label4.Align       := alNone;
    Label4.Font.Name   := 'Tahoma';
    Label4.Font.Size   := 8;
    Label4.Font.Color  := clWindowText;
    Label4.Color       := clBtnFace;
    //......................................
    //......................................
    //Label12
    Label12 := TLabel.Create(Result);
    Label12.Parent := GroupBox2;
    Label12.Left    := 273;
    Label12.Top     := 3;
    Label12.Width   := 33;
    Label12.Height  := 13;
    Label12.Visible := TRUE;
    Label12.Tag     := 0;
    Label12.Enabled  := TRUE;
    Label12.Hint     := '';
    Label12.ShowHint := FALSE;
    Label12.Caption     := 'ItemID';
    Label12.Transparent := TRUE;
    Label12.WordWrap    := FALSE;
    Label12.Alignment   := taLeftJustify;
    Label12.Layout      := tlTop;
    Label12.AutoSize    := TRUE;
    Label12.Align       := alNone;
    Label12.Font.Name   := 'Tahoma';
    Label12.Font.Size   := 8;
    Label12.Font.Color  := clWindowText;
    Label12.Color       := clBtnFace;
    //......................................
    //......................................
    //Label13
    Label13 := TLabel.Create(Result);
    Label13.Parent := GroupBox2;
    Label13.Left    := 349;
    Label13.Top     := 3;
    Label13.Width   := 35;
    Label13.Height  := 13;
    Label13.Visible := TRUE;
    Label13.Tag     := 0;
    Label13.Enabled  := TRUE;
    Label13.Hint     := '';
    Label13.ShowHint := FALSE;
    Label13.Caption     := 'Кол-во';
    Label13.Transparent := TRUE;
    Label13.WordWrap    := FALSE;
    Label13.Alignment   := taLeftJustify;
    Label13.Layout      := tlTop;
    Label13.AutoSize    := TRUE;
    Label13.Align       := alNone;
    Label13.Font.Name   := 'Tahoma';
    Label13.Font.Size   := 8;
    Label13.Font.Color  := clWindowText;
    Label13.Color       := clBtnFace;
    //......................................
    //......................................
    //CheckBoxItem
    CheckBoxItem := TCheckBox.Create(Result);
    CheckBoxItem.Parent := GroupBox2;
    CheckBoxItem.Left    := 18;
    CheckBoxItem.Top     := 18;
    CheckBoxItem.Width   := 66;
    CheckBoxItem.Height  := 17;
    CheckBoxItem.Visible := TRUE;
    CheckBoxItem.Tag     := 0;
    CheckBoxItem.Enabled  := TRUE;
    CheckBoxItem.Hint     := 'Поставить галочку если выбрали предмет';
    CheckBoxItem.ShowHint := TRUE;
    CheckBoxItem.Caption    := 'Предмет';
    CheckBoxItem.Font.Name  := 'Tahoma';
    CheckBoxItem.Font.Size  := 8;
    CheckBoxItem.Font.Color := clWindowText;
    CheckBoxItem.Color       := clBtnFace;
    CheckBoxItem.TabOrder    := 0;
    CheckBoxItem.TabStop     := TRUE;
    CheckBoxItem.Checked     := FALSE;
    CheckBoxItem.AllowGrayed := FALSE;
    CheckBoxItem.State       := cbUnchecked;
    CheckBoxItem.OnClick     := @CheckBoxItem_Click;
    //......................................
    //......................................
    //ComboBoxItem
    ComboBoxItem := TComboBox.Create(Result);
    ComboBoxItem.Parent := GroupBox2;
    ComboBoxItem.Left    := 90;
    ComboBoxItem.Top     := 16;
    ComboBoxItem.Width   := 169;
    ComboBoxItem.Height  := 21;
    ComboBoxItem.Visible := TRUE;
    ComboBoxItem.Tag     := 0;
    ComboBoxItem.Enabled  := TRUE;
    ComboBoxItem.Hint     := 'Выбери из списка улучшаемый предмет';
    ComboBoxItem.ShowHint := TRUE;
    ComboBoxItem.Text       := 'ComboBoxItem';
    ComboBoxItem.Font.Name  := 'Tahoma';
    ComboBoxItem.Font.Size  := 8;
    ComboBoxItem.Font.Color := clWindowText;
    ComboBoxItem.Color          := clWindow;
    ComboBoxItem.TabOrder       := 1;
    ComboBoxItem.TabStop        := TRUE;
    ComboBoxItem.ItemIndex          := -1;
    ComboBoxItem.Sorted         := FALSE;
    ComboBoxItem.ItemHeight     := 13;
    ComboBoxItem.OnClick     := @ComboBoxItem_Click;
    //......................................
    //......................................
    //ButtonStartEnchant
    ButtonStartEnchant := TButton.Create(Result);
    ButtonStartEnchant.Parent := GroupBox2;
    ButtonStartEnchant.Left    := 265;
    ButtonStartEnchant.Top     := 67;
    ButtonStartEnchant.Width   := 75;
    ButtonStartEnchant.Height  := 25;
    ButtonStartEnchant.Visible := TRUE;
    ButtonStartEnchant.Tag     := 0;
    ButtonStartEnchant.Enabled  := TRUE;
    ButtonStartEnchant.Hint     := '';
    ButtonStartEnchant.ShowHint := FALSE;
    ButtonStartEnchant.Caption    := 'Start';
    ButtonStartEnchant.Font.Name  := 'Tahoma';
    ButtonStartEnchant.Font.Size  := 8;
    ButtonStartEnchant.Font.Color := clWindowText;
    ButtonStartEnchant.Font.CharSet := 1;
    ButtonStartEnchant.TabOrder     := 2;
    ButtonStartEnchant.TabStop      := TRUE;
    ButtonStartEnchant.Cancel       := FALSE;
    ButtonStartEnchant.ModalResult  := 0;
    ButtonStartEnchant.OnClick     := @ButtonStartEnchant_Click;
    //......................................
    //......................................
    //ButtonStopEnchant
    ButtonStopEnchant := TButton.Create(Result);
    ButtonStopEnchant.Parent := GroupBox2;
    ButtonStopEnchant.Left    := 341;
    ButtonStopEnchant.Top     := 67;
    ButtonStopEnchant.Width   := 75;
    ButtonStopEnchant.Height  := 25;
    ButtonStopEnchant.Visible := TRUE;
    ButtonStopEnchant.Tag     := 0;
    ButtonStopEnchant.Enabled  := TRUE;
    ButtonStopEnchant.Hint     := '';
    ButtonStopEnchant.ShowHint := FALSE;
    ButtonStopEnchant.Caption    := 'Stop';
    ButtonStopEnchant.Font.Name  := 'Tahoma';
    ButtonStopEnchant.Font.Size  := 8;
    ButtonStopEnchant.Font.Color := clWindowText;
    ButtonStopEnchant.Font.CharSet := 1;
    ButtonStopEnchant.TabOrder     := 3;
    ButtonStopEnchant.TabStop      := TRUE;
    ButtonStopEnchant.Cancel       := FALSE;
    ButtonStopEnchant.ModalResult  := 0;
    ButtonStopEnchant.OnClick     := @ButtonStopEnchant_Click;
    //......................................
    //......................................
    //CheckBoxScroll
    CheckBoxScroll := TCheckBox.Create(Result);
    CheckBoxScroll.Parent := GroupBox2;
    CheckBoxScroll.Left    := 18;
    CheckBoxScroll.Top     := 41;
    CheckBoxScroll.Width   := 66;
    CheckBoxScroll.Height  := 23;
    CheckBoxScroll.Visible := TRUE;
    CheckBoxScroll.Tag     := 0;
    CheckBoxScroll.Enabled  := TRUE;
    CheckBoxScroll.Hint     := 'Поставить галочку если выбрали свиток улучшения';
    CheckBoxScroll.ShowHint := TRUE;
    CheckBoxScroll.Caption    := 'Свиток';
    CheckBoxScroll.Font.Name  := 'Tahoma';
    CheckBoxScroll.Font.Size  := 8;
    CheckBoxScroll.Font.Color := clWindowText;
    CheckBoxScroll.Color       := clBtnFace;
    CheckBoxScroll.TabOrder    := 4;
    CheckBoxScroll.TabStop     := TRUE;
    CheckBoxScroll.Checked     := FALSE;
    CheckBoxScroll.AllowGrayed := FALSE;
    CheckBoxScroll.State       := cbUnchecked;
    CheckBoxScroll.OnClick     := @CheckBoxScroll_Click;
    //......................................
    //......................................
    //ComboBoxScroll
    ComboBoxScroll := TComboBox.Create(Result);
    ComboBoxScroll.Parent := GroupBox2;
    ComboBoxScroll.Left    := 90;
    ComboBoxScroll.Top     := 40;
    ComboBoxScroll.Width   := 169;
    ComboBoxScroll.Height  := 21;
    ComboBoxScroll.Visible := TRUE;
    ComboBoxScroll.Tag     := 0;
    ComboBoxScroll.Enabled  := TRUE;
    ComboBoxScroll.Hint     := 'Выбери из списка свиток улучшения';
    ComboBoxScroll.ShowHint := TRUE;
    ComboBoxScroll.Text       := 'ComboBoxScroll';
    ComboBoxScroll.Font.Name  := 'Tahoma';
    ComboBoxScroll.Font.Size  := 8;
    ComboBoxScroll.Font.Color := clWindowText;
    ComboBoxScroll.Color          := clWindow;
    ComboBoxScroll.TabOrder       := 5;
    ComboBoxScroll.TabStop        := TRUE;
    ComboBoxScroll.ItemIndex          := -1;
    ComboBoxScroll.Sorted         := FALSE;
    ComboBoxScroll.ItemHeight     := 13;
    ComboBoxScroll.OnClick     := @ComboBoxScroll_Click;
    //......................................
    //......................................
    //EditItemVal
    EditItemVal := TEdit.Create(Result);
    EditItemVal.Parent := GroupBox2;
    EditItemVal.Left    := 341;
    EditItemVal.Top     := 16;
    EditItemVal.Width   := 72;
    EditItemVal.Height  := 21;
    EditItemVal.Visible := TRUE;
    EditItemVal.Tag     := 0;
    EditItemVal.Enabled  := TRUE;
    EditItemVal.Hint     := '';
    EditItemVal.ShowHint := FALSE;
    EditItemVal.Text       := '0';
    EditItemVal.Font.Name  := 'Tahoma';
    EditItemVal.Font.Size  := 8;
    EditItemVal.Font.Color := clWindowText;
    EditItemVal.Color        := clWindow;
    EditItemVal.TabOrder     := 6;
    EditItemVal.TabStop      := TRUE;
    EditItemVal.ReadOnly     := TRUE;
    EditItemVal.MaxLength    := 0;
    EditItemVal.AutoSize     := TRUE;
    //......................................
    //......................................
    //EditScrollVal
    EditScrollVal := TEdit.Create(Result);
    EditScrollVal.Parent := GroupBox2;
    EditScrollVal.Left    := 341;
    EditScrollVal.Top     := 40;
    EditScrollVal.Width   := 72;
    EditScrollVal.Height  := 21;
    EditScrollVal.Visible := TRUE;
    EditScrollVal.Tag     := 0;
    EditScrollVal.Enabled  := TRUE;
    EditScrollVal.Hint     := '';
    EditScrollVal.ShowHint := FALSE;
    EditScrollVal.Text       := '0';
    EditScrollVal.Font.Name  := 'Tahoma';
    EditScrollVal.Font.Size  := 8;
    EditScrollVal.Font.Color := clWindowText;
    EditScrollVal.Color        := clWindow;
    EditScrollVal.TabOrder     := 7;
    EditScrollVal.TabStop      := TRUE;
    EditScrollVal.ReadOnly     := TRUE;
    EditScrollVal.MaxLength    := 0;
    EditScrollVal.AutoSize     := TRUE;
    //......................................
    //......................................
    //EditScrollOID
    EditScrollOID := TEdit.Create(Result);
    EditScrollOID.Parent := GroupBox2;
    EditScrollOID.Left    := 263;
    EditScrollOID.Top     := 40;
    EditScrollOID.Width   := 72;
    EditScrollOID.Height  := 21;
    EditScrollOID.Visible := TRUE;
    EditScrollOID.Tag     := 0;
    EditScrollOID.Enabled  := TRUE;
    EditScrollOID.Hint     := '';
    EditScrollOID.ShowHint := FALSE;
    EditScrollOID.Text       := '0';
    EditScrollOID.Font.Name  := 'Tahoma';
    EditScrollOID.Font.Size  := 8;
    EditScrollOID.Font.Color := clWindowText;
    EditScrollOID.Color        := clWindow;
    EditScrollOID.TabOrder     := 8;
    EditScrollOID.TabStop      := TRUE;
    EditScrollOID.ReadOnly     := TRUE;
    EditScrollOID.MaxLength    := 0;
    EditScrollOID.AutoSize     := TRUE;
    //......................................
    //......................................
    //EditItemOID
    EditItemOID := TEdit.Create(Result);
    EditItemOID.Parent := GroupBox2;
    EditItemOID.Left    := 264;
    EditItemOID.Top     := 16;
    EditItemOID.Width   := 72;
    EditItemOID.Height  := 21;
    EditItemOID.Visible := TRUE;
    EditItemOID.Tag     := 0;
    EditItemOID.Enabled  := TRUE;
    EditItemOID.Hint     := '';
    EditItemOID.ShowHint := FALSE;
    EditItemOID.Text       := '0';
    EditItemOID.Font.Name  := 'Tahoma';
    EditItemOID.Font.Size  := 8;
    EditItemOID.Font.Color := clWindowText;
    EditItemOID.Color        := clWindow;
    EditItemOID.TabOrder     := 9;
    EditItemOID.TabStop      := TRUE;
    EditItemOID.ReadOnly     := TRUE;
    EditItemOID.MaxLength    := 0;
    EditItemOID.AutoSize     := TRUE;
    //......................................
    Yes := TRUE;
  FINALLY
    if not Yes then begin
       //Освобождаем ресурсы, если неудачно ...
       if Result<>NIL then begin
          Result.Free;
          Result:=NIL;
       end;
    end;
  END;
  msg.Lines.Add('Автоматизация заточки by NLObP для Грации+v0ltag3s fix for GF!');
  Result.Show;
end; //Create_FormMain
//========================
//========================
procedure Init; //Вызывается при включении скрипта
var
  i:integer;
begin
  FormMain:=Create_FormMain;
  //Enchant:=false;
  CurEnchLvl:=0;
  timer:=TTimer.Create(nil);
  timer.OnTimer:=@OnTimer;
  timer.enabled:=false;
  timer.interval:=500; //время задержки

  ShowInf:=TTimer.Create(nil);
  ShowInf.OnTimer:=@OnShowInfo;
  ShowInf.enabled:=true;
  ShowInf.interval:=1000; //время задержки

  StartTime:=time;
  good:=0;
  broken:=0;
  ready:=false;
  //RequestItemList вызываем инвентарь
  buf:=hstr('14');
  SendToServerEx(Name);
  StringList:=TStringList.Create;
  ItemsName:=TStringList.Create;
  try
    ItemsName.LoadFromFile('itemsid.ini');
  except
    msg.Lines.Add('itemsid.ini не найден!');
    exit;
  end;
end;
//..............................................................................
procedure Free; //Вызывается при выключении скрипта
begin
  BaseItems:=nil; //нельзя так делать с массивом
  ShowInf.Enabled:=false;  ShowInf.Interval:=0;  ShowInf.Free; ShowInf.OnTimer:=nil;
  timer.Enabled:=false;  timer.Interval:=0;  timer.Free; timer.OnTimer:=nil;

  StringList.Clear;
  ItemsName.Clear;
  //достаточно освободить форму
  Free_FormMain;
end;
//..............................................................................
procedure ShowInfo;
var
  i: integer;
begin
  stats.Lines.Clear;
  stats.Lines.Add('Имя чара :'+Name);
  stats.Lines.Add('Время старта :'+TimeToStr(starttime));
  stats.Lines.Add('Время ловли :'+TimeToStr(time-starttime));
  stats.Lines.Add('Улучшили: '+IntToStr(good));
  stats.Lines.Add('Сломали: '+IntToStr(broken));
end;
//......................................
//***************************************************************
procedure OnShowInfo(Sender: TObject); //выводим в форму
begin
  ShowInfo;
end;
//..............................................................................
//послать сообщение в чат
//use: SendMessage(msg);
procedure SendMessage(msg:string);  //отправка системных сообщений клиенту
begin
  buf:=#$4A;
  WriteD(0);
  WriteD(10);
  WriteS('');
  WriteS(msg);
  SendToClientEx(Name);
end;
//..............................................................................
procedure debugMsg(msg: string);
begin
  if debug then begin
    sendMSG(msg);
    SendMessage(msg);
  end;
end;
//..............................................................................
procedure ItemList;
{Создаем базу Items}
//11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h(ItemType1)d(ObjectID)
//   d(ItemID:Get.Func01)d(LocationSlot)d(Count)h(ItemType2)h(CustomType1)
//   h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2)d(AugmentationID)
//   d(Mana)d(AttackAttrElement)d(AttackAttrElementVal)d(DefAttrFire)
//   d(DefAttrWater)d(DefAttrWind)d(DefAttrEarth)d(DefAttrHoly)d(DefAttrUnholy)
var
  i, j, k: integer;
  ListCount: integer;
begin
  j:=4; //смещение для ListCount
  ListCount:=ReadH(j); //количество итемов не должно превышать max!
  for i:=1 to maxitems do
    if (i<=ListCount) then 
    begin 
      BaseItems[i,1]:=ReadH(j);  //ItemType1  
      BaseItems[i,2]:=ReadD(j);  //ObjectID
      BaseItems[i,3]:=ReadD(j);  //ItemID
      BaseItems[i,4]:=ReadD(j);  //LocationSlot
      BaseItems[i,5]:=ReadD(j);
      inc(j,4); 
      BaseItems[i,6]:=ReadH(j);  //ItemType2
      BaseItems[i,7]:=ReadH(j);  //CustomType1
      BaseItems[i,8]:=ReadH(j);  //isEquipped
      BaseItems[i,9]:=ReadD(j);  //BodyPart
      BaseItems[i,10]:=ReadH(j); //EnchantLevel
      BaseItems[i,11]:=ReadH(j); //CustType2
      BaseItems[i,12]:=ReadH(j); //AugmentationID
      inc(j,26); 
    end else for k:=1 to 12 do BaseItems[i,k]:=0; // забиваем нулями
  //вносим изменения в чекбоксы
  StringList.Clear;
  try
    for i:=1 to ListCount do begin
      try
        //StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
        StringList.Add(ItemsName.Values[IntToStr(BaseItems[i,3])]); //записываем название вещей из инвентаря
      except;
        //msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(BaseItems[i,3])+' в itemsid.ini');
      end
    end;
  except;
    //msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
    //msg.Lines.Add(inttostr(BaseItems[i,3]));
    exit;
  end;
  if not CheckBoxItem.Checked then begin //наполняем комбобокс
    with ComboBoxItem do
    begin
      Items.Clear;
      Items.Assign(StringList);
      ItemIndex:=0;
    end;
  end;
  if not CheckBoxScroll.Checked then begin //наполняем комбобокс
    with ComboBoxScroll do
    begin
      Items.Clear;
      Items.Assign(StringList);
      ItemIndex:=0;
    end;
  end;
end;
//..............................................................................
procedure InventoryUpdate; //пакет 27, Создает базу ObjectID по ItemID
var
  i, ii, j, k, ListCount, UpdType : integer;
  ItemType1, ObjectID, ItemID, LocationSlot, Count, ItemType2, CustomType1,
  isEquipped, BodyPart, EnchantLevel, CustType2, AugmentationID :integer;
  additem : boolean;
begin
  additem:=true;
  ListCount:=ReadH(2); //количество итемов
//  debugmsg('ListCount='+inttostr(ListCount));
  j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
  for i:=1 to ListCount do begin
    UpdType:=ReadH(j);
    ItemType1:=ReadH(j);
    ObjectID:=ReadD(j);
    ItemID:=ReadD(j);
    LocationSlot:=ReadD(j);
    Count:=ReadD(j);
    inc(j,4);
    ItemType2:=ReadH(j);
    CustomType1:=ReadH(j);
    isEquipped:=ReadH(j);
    BodyPart:=ReadD(j);
    EnchantLevel:=ReadH(j);
    CustType2:=ReadH(j);
    AugmentationID:=ReadD(j);
    case UpdType of
      1: k:=0;         //добавлен новый предмет
      2: k:=ObjectID; //изменен предмет в инвентаре
      3: begin       //удален
        for ii:=1 to maxitems do
          if (BaseItems[ii,2]=ObjectID) then begin
            //debugmsg('удаляем OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
            for k:=1 to 12 do BaseItems[ii,k]:=0;
            break;
          end;
      end;
    end;
    for ii:=1 to maxitems do begin
      if (BaseItems[ii,2]=k) then begin
        BaseItems[ii,1]:=ItemType1;
        //BaseItems[ii,2]:=ObjectID;
        BaseItems[ii,3]:=ItemID;
        BaseItems[ii,4]:=LocationSlot;
        BaseItems[ii,5]:=Count;
        BaseItems[ii,6]:=ItemType2;
        BaseItems[ii,7]:=CustomType1;
        BaseItems[ii,8]:=isEquipped;
        BaseItems[ii,9]:=BodyPart;
        BaseItems[ii,10]:=EnchantLevel;
        BaseItems[ii,11]:=CustType2;
        BaseItems[ii,12]:=AugmentationID;
        //debugmsg('доб/изм OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3]));
        break;
      end;
    end;
    inc(j,38);
  end;
end;
//..............................................................................
function GetItem(ID, FieldIn, FieldOut : integer): integer;
{GetInv(по чему будем искать, номер того по чему будем искать, номер того что надо найти)
где:
  ID - искомый код;
  FieldIn - по какому полю ищем;
  FieldOut - какое поле возвращаем;
1=ItemType1; 2=ObjectID;3=ItemID;4=LocationSlot;5=Count;6=ItemType2;7=CustomType1;
8=isEquipped;9=BodyPart;10=EnchantLevel;11=CustType2;12=AugmentationID;
ex1: GetInv(6408,2,1) - вернет ObjectID свадебного платья, если онное лежит в
                        инвентаре, иначе вернет -1
ex2: GetInv(6408,2,8) - вернет уровень заточки первого попавшегося в инвентаре
                        свадебного платья, если свадебного платья нет, то вернет -1
}
var
  i: integer;
begin
  for i:=1 to maxitems do
    if (BaseItems[i,FieldIn]=ID) then begin
      Result:=BaseItems[i,FieldOut];
      //debugmsg('Нашли='+inttostr(result));
      exit;
    end;
  Result:=-1;
end;
//..............................................................................
//******************************************************************************
//находим в инвентаре предмет с ItemID и возвращаем его ObjectID
function GetItemEnchant(item,lvl:integer) : integer;
var
  i : integer;
begin
  //ничего не нашли
  result:=0;
  for i:=1 to maxitems do
    if (BaseItems[i,3]=item) and (BaseItems[i,10]=lvl) then begin
      ItemEnch:=BaseItems[i,10];
      Result:=BaseItems[i,2];
      //debugmsg('Нашли='+inttostr(result));
      exit;
    end;
//  Result:=-1;
end;
//******************************************************************************
function SumItem(Item: integer):integer;
var
  sum, i : integer;
begin
  result:=0;
  //находим подходящий предмет по ItemID
  for i:=1 to maxitems do begin
    if (BaseItems[i,3]=item) then begin
//      msg.Lines.Add('Нашли предмет ItemOID='+inttostr(ItemBase[1,i])+' ItemID='+inttostr(ItemBase[2,i])+' ItemCol='+inttostr(ItemBase[3,i])+' EnchantLvl='+inttostr(ItemBase[4,i]));
//      msg.Lines.Add('i='+inttostr(i));
      result:=result+BaseItems[i,5]; //count
      //inc(result);
    end;
  end;
end;
//******************************************************************************
procedure UseItem(ObjectID: integer);
begin
  buf:=#$19;
  WriteD(ObjectID);
  WriteD(0);  
  SendToServerEx(Name);
end;
//******************************************************************************
procedure ChooseItem(ObjectID: integer);
begin
  buf:=#$D0#$4C#$00;
  WriteD(ObjectID);  
  SendToServerEx(Name);
end;
procedure RequestEnchantItem(ObjectID: integer);
begin
  buf:=#$5F;
  WriteD(ObjectID); 
  SendToServerEx(Name);
end;
//******************************************************************************
procedure OnTimer(Sender: TObject);
begin
  EditItemVal.text:=inttostr(sumitem(ItemID));
  EditScrollVal.text:=inttostr(sumitem(ScrollID));
  if (strtoint(Edit2.text)>=strtoint(Edit1.Text)) then begin
    msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
    timer.enabled:=false;
    exit;
  end;
  if (sumitem(ItemID)<=1) then begin
  //  if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
    msg.Lines.Add('Предметов для улучшения должно быть больше двух! Прервано!');
    timer.enabled:=false;
    exit;
  end;

  if ready then exit;

  ScrollOID:=GetItem(ScrollID,3,2);//найдем OID скролла
  if ScrollOID=-1 then begin
    msg.Lines.Add('Кончились свитки! Прервано!');
    timer.enabled:=false;
    exit;
  end;  
  if (flagFE=false) and (flag7C=false) and (flag87=false) and (useitems=false) and (timer.enabled=true) then begin 
  useitems:=true;
  UseItem(ScrollOID);
  pck:='';
  msg.Lines.Add('Задействовали свиток ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
  ready:=true;              end;
end;
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
  //****************************************************************************
  //не обрабатываем пустые пакеты
  if pck='' then exit; 
  //****************************************************************************
  if FromServer then
    case pck[1] of
       //......................................
      #$11: begin
        //debugmsg('S>C Пакет ItemListPacket #$11');
        ItemList;   
      end;
      //......................................
      #$21: begin
        //debugmsg('S>C Пакет InventoryUpdate #$21');
        InventoryUpdate;    
      end;
      //......................................
      //Пакет ChooseInventory
      #$7C: begin 
        flag7C:=false;
        if ready then begin //and (readd(2)=itemid)
          //ищем подходящий предмет для заточки
          timer.enabled:=false; //отключаем пока не найдем предмет для заточки
          repeat
            ItemOID:=GetItemEnchant(ItemID, CurEnchLvl);
            if ItemOID=0 then begin
              inc(CurEnchLvl);
              Edit2.text:=inttostr(CurEnchLvl);
            end;
          until ItemOID<>0;
          //************************************************
          if (CurEnchLvl>=strtoint(Edit1.Text)) then begin
            msg.Lines.Add('Нет подходящих предметов для улучшения! Прервано!');
            msg.Lines.Add('Достигли MaxEnchLvl!');
            timer.enabled:=false;
            ready:=false;
            delay(500);
            RequestEnchantItem(-1);
            exit;
          end else begin
            msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
            flag7c:=true;         
            ready:=false;
            timer.enabled:=true; 
            delay (500);
            exit;
           end;
        end;
      end;  
      #$FE: begin
              if pck[2]=#$81
                 then begin
                        flagFE:=true; 
                        delay (2000); 
                        exit;
                      end;   
            end;
      #$87: begin
        if readd(2)=0 
           then begin
                  msg.Lines.Add('Улучшили ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
                  inc(good); 
                  flag87:=true; 
                  delay (500);
                  exit;
                end   
           else begin
                  msg.Lines.Add('Сломали ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID)+' ItemEnchLvl='+IntToStr(ItemEnch));
                  inc(broken);
                  flag87:=true; 
                  delay (500);
                  exit;
                end;
        end;    
        end;
        CurEnchLvl:=0; 
 
    if flag7C=true
       then begin ChooseItem(ItemOID); flag7C:=false; end;
    if flagFE=true
       then begin RequestEnchantItem(ItemOID); flagFE:=false; end;
    if flag87=true
       then begin flag87:=false; useitems:=false; end;   
end.
Вот еще 1, так же отлично работавший:

Код:
//  авто-gracia_final +1. 
//  хроники  Грация ФИНАЛ
//  Соцдействие ДА открыть управление скриптом
//  в пати чат пишем уровень заточки
//  можно менять в процесе работы скрипта
//  заточить один предмет чтоб запомнить чем и что точить
//  дальше скрипт сам точит до указаного уровня заточки
//  все предметы ОДИНАКОВЫЕ  с  ПЕРВЫМ  заточеным 
//  предметы точатся добавляя по +1 на предмет 
//  т.е если у вас предметы с  одинаковым уровнем заточки например 0
//  будет точится первый предмет до +1, потом второй до +1 и т.д
//  если предмет при заточки блесс скрол слетел на 0 или на уровень как у вас на сервере
//  то будет точиться он пока несравняется с остальными
//   и т.д
//  пока недостигнете заданого уровня заточки
//  если предметов более 1 то один остается 
//  АВТОР ==>>>> TAMBIK
program Enchant_gracia;
   const
//===========================================

   myname='lWRXl'; //<<== пишем свой НИК

   max=80;//<<== колличество ячеек в рюкзаке

    
//===========================================
    HTML='<html><body><center>'+
 '<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
 '<img src="L2UI.SquareWhite" width=260 height=1>'+
 '<font color="04fbfb">Cкрипт автозаточка для gracia_final</font><br>'+
 '<img src="L2UI.SquareWhite" width=260 height=1>'+
 '<img src="L2UI.Squarewidth" width=260 height=1>'+
 '<font color="04fbfb">системные сообщения</font><br>'+
 '<button value="в к л" action="bypass -3"      width=80 height=15  back="sek.cbui94"  fore="sek.cbui92">'+
 '<img src="L2UI.SquareWhite" width=60 height=1>'+
 '<img src="L2UI.Squarewidth" width=60 height=4>'+
 '<font color="04fbfb">             </font><br>'+
 '<button value=" в ы к л " action="bypass -4" width=80 height=15  back="sek.cbui94"  fore="sek.cbui92">'+
 '<img src="L2UI.SquareWhite" width=60 height=1>'+
 '<img src="L2UI.Squarewidth" width=60 height=4>'+ 
 '<font color="04fbfb">             </font><br>'+
 '<img src="L2UI.SquareWhite" width=260 height=1>'+
 '<img src="L2UI.Squarewidth" width=260 height=4>'+
 '<font color="04fbfb">АВТОЗАТОЧКА</font><br>'+
 '<font color="04fbfb">             </font><br>'+
 '<button value="П У С К" action="bypass  -pusk"     width=100 height=15 back="sek.cbui94"  fore="sek.cbui92">'+
 '<img src="L2UI.SquareWhite" width=60 height=1>'+
 '<img src="L2UI.Squarewidth" width=60 height=4>'+
 '<font color="04fbfb">          </font><br>'+
 '<button value="С Т О П" action="bypass  -stop"     width=100 height=20 back="sek.cbui94"  fore="sek.cbui92">'+
 '<img src="L2UI.SquareWhite" width=60 height=1>'+
 '<img src="L2UI.Squarewidth" width=60 height=4>'+ 
 '<font color="04fbfb">          </font><br>'+
 '<img src="L2UI.SquareWhite" width=260 height=1>'+
 '<img src="L2UI.Squarewidth" width=260 height=4>'+
 '<img src="L2UI.SquareWhite" width=60 height=1>'+
 '<img src="L2UI.Squarewidth" width=60 height=4>'+ 
 '<font color="LEVEL">Автор TAMBIK</font><br>'+
 '</center></body></html>';
//==========================================
  var
    BaseItems:array[1..max,1..11] of integer;
    Baselvl:array[0..max] of integer;
    Timer01: TTimer;
    Timer02: TTimer;
    Timer03: TTimer;

    mytext:string; 
    Bypass:string; 
    autostart,start,autoMsg:Boolean;
    flag : Boolean;
     t,l,d,x,y,ii,i:integer;

    ListSize,ItemEnch:word; 
    textID,itemID:integer;
    enchantObjectID:integer;
    enchantID,skrolObjectID:integer; 
    ItemOID,objectOID:integer;  
    sumskrol,sumitemID,sumitem:integer;
    maxlvl,minlvl,enchlvl,selectlvl:integer;
    skrolID,skrolObj:integer;
    minEnchitem:integer;
     object,index : integer;
//==========================================
//  ShowHTML(HTML);
Procedure ShowHTML( _html : string );
begin
  buf:=#$19;
  WriteD(5);
  WriteS(_HTML);
  SendToClientEx(myname);
   end;
//========================
procedure ActionUse;
 begin
     Bypass:=ReadS(2);
     case Bypass of
  '-3':begin  autoMsg:=true; end;
  '-4':begin  autoMsg:=false; end;
  '-pusk':begin 
   if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
   if (maxlvl=0) then SendMsg2( '  Неуказан Уровень Заточки  !' );
    SendMsg2( '_______________________________' );
   if autostart and  (maxlvl>0)  then begin
        buf:=hstr('14');
        SendToServerEx(myname);
      SendMsg2( '        ! ! !   П О Е Х А Л И    ! ! !' );
      SendMsg2( '_______________________________' );
      start:=true;
      Timer01.enabled:=true;// вкл таймер выбора свитка
       end;
     end;
  '-stop':begin
     deleteBase;
     start:=false;
     enchantID:=0;
     ItemEnch:=0;
      minlvl:=0;
     sumitem:=0;
     Timer01.enabled:=false;
     Timer02.enabled:=false;
     Timer03.enabled:=false;
    SendMsg2( '         ! ! !   С Т О П   ! ! ! ' );
    stopselectskrol;
    index :=0;
 for ii:=1 to max do 
  Baselvl[ii]:=-1;
   end;
 end;
end;
//===========================================
procedure SendMsg2(msg:string);
begin 
  buf:=#$4A;
  WriteD(0);
  WriteD(3);
  WriteS('');
  WriteS(msg);
  SendToClientEx(myname);
end;
//===========================================
procedure Resultmaxlvl;
var
  i:integer;
begin
    i:=2;
    mytext:=ReadS(i);
    textID:=ReadD(i);
 if (textID=3)  then begin
     maxlvl:=StrToInt(mytext);
SendMsg2( '  установлен Уровень Заточки: '+IntToStr(maxlvl)+'' ); 
end;
end;
//.............................................................................. 
procedure ItemList;
var
  i, j, k: integer;
  count,x:integer; 
 begin
   count:=0;
   x:=0;
   y:=0;
   j:=4; //пропускаем дo ListSize
  ListSize:=ReadH(j); 
   count:=round((Length(pck)-5) / ListSize);// длина блока
  for i:=1 to ListSize do
  if (i<=ListSize) then begin
      BaseItems[i,1]:=ReadH(j);  //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
      BaseItems[i,2]:=ReadD(j);  //ObjectID
      BaseItems[i,3]:=ReadD(j);  //ItemID
      BaseItems[i,4]:=ReadD(j);  //LocationSlot
      BaseItems[i,5]:=ReadD(j);  //  Amount: 
      BaseItems[i,6]:=ReadD(j);  //  Amount: 
      BaseItems[i,7]:=ReadH(j);//ItemType2
      BaseItems[i,8]:=ReadH(j);// CustomType1
      BaseItems[i,9]:=ReadH(j);//isEquipped: 
      BaseItems[i,10]:=ReadD(j);//BodyPart
      BaseItems[i,11]:=ReadH(j);//EnchantLevel
             inc(x); // счетчик 
            //y := пропускаем до следущего блока
    y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
            inc(j,y); 
  end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
         addenchantitemID;
   
if (skrolID>0)  then begin
    sumskrol:=Getitem(skrolID,3,5);//считаем SKROL
if autoMsg  then SendMsg2 ('   SKROL ... c  ID : '+IntToStr(skrolID)+' =  '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then  Timer01.enabled:=true;// вкл таймер выбора свитка
if (sumskrol=0)  then  begin
   SendMsg2 ('........ НЕДОСТАТОЧНО  SKROL........  ');
  SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
   start:=false;
 end;
end;
end;
//=============================
procedure EnchantResult;
  begin
   deleteBase;
   index :=0;
 for ii:=1 to max do 
  Baselvl[ii]:=-1;
  end;
//=============================
procedure deleteBase;
var
  i,j,k:integer;  
 begin
    for i:=1 to max do
      BaseItems[i,1]:=0;
      BaseItems[i,2]:=0; //ObjectID  
      BaseItems[i,3]:=0;  //ItemID
      BaseItems[i,4]:=0;  
      BaseItems[i,5]:=0; 
      BaseItems[i,6]:=0; 
      BaseItems[i,7]:=0;
      BaseItems[i,8]:=0;
      BaseItems[i,9]:=0;
      BaseItems[i,10]:=0;
      BaseItems[i,11]:=0;
       inc(j,y);  
end;         
//===========================
function Getitem(Obj,up,down:integer): integer; 
var 
  i: integer;
begin
 Result:= 0; //В начале у нас 0
  for i:=1 to max do
    if (BaseItems[i,up]=Obj) then begin
      Result:=BaseItems[i,down];
   end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer; 
var 
  i: integer;
begin
 Result:= 0; //В начале у нас 0
  for i:=1 to max do
    if (BaseItems[i,up]=Obj)  then begin
      Result:=Result+BaseItems[i,down];
   end;
end;
//=============================

// добавляем в базу  ЛВЛ заточки
 procedure  addenchantitemID;
 begin
         for i:=1 to max do
 if (BaseItems[i,3] = ItemOID)  then  begin
        enchlvl:=BaseItems[i,11];
    flag:=false; 
           for ii:=1 to max do
   if (Baselvl[ii] = enchlvl) then  begin // текущий  уже есть в массиве,
       flag := true;
         BREAK; { прекращаем цикл }
           end;
 if (flag = false) then begin
        for ii:=1 to max do 
   if (Baselvl[ii]=-1) then begin // добавим   в массив,
        Baselvl[ii]:=enchlvl;  
          index :=ii;
       BREAK; { прекращаем цикл }
  end;
end;
end;
end;
//========================== 
 procedure ChooseInventory;
var
 OID, lvl:integer;
begin
  if (ItemOID>0) and start then  begin
           sumitemID:=0;
      sumitemID:=Getsumitem(ItemOID,3,5); // считаем предметы для заточки
              minlvl:=Baselvl[1];
       for ii:=2  to   index  do   
  if  Baselvl[ii] < minlvl   then  
        minlvl:=Baselvl[ii];// мин заточка 
         objectOID:=0;
 if (sumitemID > sumitem) then objectOID:=GetObjectID(ItemOID);//находим по ItemID  предмет с ObjectID
 if (objectOID = 0)  then begin
              start:=false;
      SendMsg2('Больше предметов c ID : '+IntToStr(ItemOID)+' для заточки НЕТ ! ! ! ! ');
           lvl:=0;
         for i:=1 to max do
  if (BaseItems[i,3] = ItemOID) then  begin
        OID:=BaseItems[i,2];
        lvl:=BaseItems[i,11];
SendMsg2('Предмет  c ID : '+IntToStr(ItemOID)+'  с ObjectID : '+IntToStr(OID)+'  заточен до : '+IntToStr(lvl)+' ');
   end;
 end;
end;
end;
//=========================
//находим enchantID предмета по  ItemID для заточки
function GetObjectID(ItemOID:integer) : integer;
var
  ID,i:integer;
begin
enchantID:= 0;
  ItemEnch:=0;  
  Result:= 0;
 if autoMsg  then   SendMsg2( '*******************************************' );
 if (ItemOID>0) then begin
 if autoMsg  then  SendMsg2 ('    ищем ObjectID предмета с ID  :  ' +IntToStr(ItemOID)+' ');
 if autoMsg  then  SendMsg2('------------------------------' );

     for i:=1 to max do
 if (BaseItems[i,3] = ItemOID) and (BaseItems[i,11] = minlvl) and (BaseItems[i,11] < maxlvl) then begin
     enchantID:=BaseItems[i,2];
      Result:=BaseItems[i,2];
     ItemEnch:=BaseItems[i,11];
if autoMsg  then  SendMsg2('   ..... найден предмет для заточки  ..... ');
if autoMsg  then  SendMsg2(' ID  : '+IntToStr(ItemOID)+' и ObjectID : '+IntToStr(enchantID)+'   заточен до : '+IntToStr(ItemEnch)+'');
if autoMsg  then  SendMsg2('------------------------------' );
     if (enchantID>0) then  Timer02.enabled:=true;
      Break;  // прерываем дальнейший перебор массива.
 end;
end;
 end;
//==========================
procedure stopselectskrol;
begin
  buf:=hstr('D04E00');
 SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
  buf:=#$19;
  WriteD(skrolObjectID);
  WriteD(0);
  SendToServerEx(myname);
 Timer01.enabled:=false;
   end;
//--------------------------
procedure OnTimer02(Sender: TObject);
begin
   buf:=hstr('D04C00');
   WriteD(enchantID);
   SendToServerEx(myname);
   Timer02.enabled:=false;
   Timer03.enabled:=true;
   end;
procedure OnTimer03(Sender: TObject);
begin 
   buf:=#$5F;
   WriteD(enchantID);
   WriteD(0);
   SendToServerEx(myname);
   Timer03.enabled:=false;
if autoMsg  then SendMsg2('      .....    Точим Предмет    ..... ');
if autoMsg  then SendMsg2( ' ID :  '+IntToStr(ItemOID)+' и ObjectID : '+IntToStr(enchantID)+'  -  до  :  '+IntToStr(maxlvl)+'' );
if autoMsg  then SendMsg2( '_______________________________' );
 end;
//-----------------------------------------
procedure Init;
begin
  minlvl:=0;    maxlvl:=0;  enchlvl:=0; ItemEnch:=0;
  sumskrol:=0;  sumitem:=0; sumitemID:=0;
  objectOID:=0; object:=0;  enchantObjectID:=0;
  enchantID:=0; skrolObjectID:=0;
  skrolID:=0;   itemID:=0; ItemOID:=0;
  t:=0;l:=0;d:=0;index :=0;
   
   flag:=false; 
   autostart:=false;
   start:=false;
   autoMsg:=true; 

   Timer01:=TTimer.Create(nil);
   Timer01.OnTimer:=@OnTimer01;
   Timer01.enabled:=false;
   Timer01.interval:=400; //<<== время  выбора свитка
 
   Timer02:=TTimer.Create(nil);
   Timer02.OnTimer:=@OnTimer02;
   Timer02.enabled:=false;
   Timer02.interval:=400; //<<== время  выбора предмета

   Timer03:=TTimer.Create(nil);
   Timer03.OnTimer:=@OnTimer03;
   Timer03.enabled:=false;
   Timer03.interval:=2500; //<<== время между заточкой  

 SendMsg2( '   в пати чат пишем уровень заточки' );
 SendMsg2( '    заточить предмет   !   !' );
 SendMsg2( '  Соцдействие  ДА - откр окно управления ' );
 SendMsg2( '------------------------------------- ' );
   buf:=hstr('14');
   SendToServerEx(myname);
  for ii:=1 to max do 
      Baselvl[ii]:=-1;
 end;
procedure Free;
begin
  Timer01.free;
  Timer02.free;
  Timer03.free;
end;
 //=========================
begin
//не обрабатываем пустые пакеты
  if pck='' then exit; 
 if FromServer and (pck[1]=#$87) then  EnchantResult;
 if FromServer and (pck[1]=#$11) then ItemList;
 if FromServer and (pck[1]=#$7C) then ChooseInventory;
 if FromClient and (pck[1]=#$49) then begin Resultmaxlvl;pck:='';exit;end;     //
 if FromClient and (pck[1]=#$56) and (ReadD(2)=24) then begin
           ShowHTML(HTML); pck:='';exit; end; 
 if FromClient and (pck[1]=#$23)  then begin ActionUse; pck:='';exit;end;     //
begin
 if (start=false) and FromClient then   
    case pck[1] of
 #$19:begin 
        stopselectskrol;
        buf:=hstr('14');
        SendToServerEx(myname);
      t:=1;
    skrolObjectID:=ReadD(2);
    skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
    SendMsg2(' .................' );
    SendMsg2('   активирован SKROL  ID : '+IntToStr(skrolID)+' ' );
    SendMsg2(' .................' );
           end;
 #$D0:if  ReadH(2)=76 then  begin
       l:=1;
       SendMsg2('    окно выбора предмета ' );
       SendMsg2(' .................' );
     end;
 #$5F:begin
       d:=1;
    enchantObjectID:=ReadD(2);
    if  (t=1) and (l=1) and (d=1) then begin
        autostart:=true;
       ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
    SendMsg2 ('  ID предмета :  '+IntToStr(ItemOID)+'   для заточки');
  sumitemID:=0;
  sumitem:=0;
  sumitemID:=Getsumitem(ItemOID,3,5); // считаем предметы для заточки
  SendMsg2 (' Предметов для заточки с  ID :  '+IntToStr(ItemOID)+'  =  '+IntToStr(sumitemID)+' ШТ ');
       if (sumitemID > 1) then sumitem:=1;
       stopselectskrol;
      end;
     end;
   end;
end;
end.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]

Последний раз редактировалось ExxtanzO; 05.05.2010 в 17:40.
 
Пользователь сказал cпасибо:
Anizida (05.05.2010)
Старый 05.05.2010, 23:17   #3
 Разведчик
Аватар для DeZepTup
 
DeZepTup на правильном пути
Регистрация: 02.07.2009
Сообщений: 43
Популярность: 24
Сказал(а) спасибо: 14
Поблагодарили 7 раз(а) в 7 сообщениях
Отправить сообщение для DeZepTup с помощью ICQ Отправить сообщение для DeZepTup с помощью Skype™
 
По умолчанию Re: Автоточка на Epilogue

Я юзаю свой ибо просто подобрать делей при котором не кикает. Пакеты каждый раз ловить и менять, но меня такая простота устраивает. У меня срач в скриптах, но вроде этот -
Код:
const
   nik='Owner';
   Enchant=15;

var
   UseItem,  PutItem, EnchantItem: string;
   Count, CurrentEnch: integer;
   Timer01: TTimer;

procedure Init;
begin
   Timer01:=TTimer.Create(nil);
   Timer01.OnTimer:=@OnTimer01;
   Timer01.enabled:=false;
   Timer01.interval:=1;
end;

procedure OnTimer01(Sender: TObject);
begin
   delay(1);
   buf:=UseItem; 
   SendToServerEx(nik);   
   delay(1);
   buf:=PutItem;    
   SendToServerEx(nik);  
   delay(1);
   buf:=EnchantItem;
   SendToServerEx(nik);
   delay(1);
end;

procedure Free;
begin
  Timer01.free;
  count:=0;
  CurrentEnch:=0;
end;

begin
    if FromServer and (pck[1]=#$87) then case ReadD(2) of
       0: begin
          CurrentEnch:=CurrentEnch+1;
          if CurrentEnch=Enchant then Timer01.enabled:=false;
          end;
       2: CurrentEnch:=0;
       end;
    if FromClient and (pck[1]=#$19) then UseItem:=pck;  
    if FromClient and (pck[1]=#$D0) then PutItem:=pck;
    if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
    if FromClient and (pck=#$34#$06#$00#$00#$00) then 
       begin
          pck:='';
          Timer01.enabled:=not(Timer01.enabled);
       end;
end.
 
Старый 05.05.2010, 23:40   #4
 Разведчик
Аватар для munfight
 
munfight никому не известный тип
Регистрация: 05.06.2009
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Автоточка на Epilogue

есть ли у кого нибудь скрипт адаптированный для одновременной заточки с разных чаров?

пользуюсь скриптом от тамбика на эпилоге, хотелось бы им точить с нескольких чаров но не получается(
 
 


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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Файл] Патч для Gracia Epilogue ExxtanzO Боты, скрипты и прочий софт для Lineage 2 6 06.07.2010 18:22
[Баг] Баг на продажу Final+Epilogue. diversantdead Баги и читы Lineage 2 0 30.04.2010 18:57
[Обсуждение] l2phx и epilogue xxZerOxx Общение и обсуждение, архив Lineage 2 2 23.02.2010 00:55

Заявление об ответственности / Список мошенников

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

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net