Показать сообщение отдельно
Старый 11.08.2008, 13:44   #40
Новичок
 
Аватар для Shadow
 
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow пока неопределено
Лампочка Shadow Edition v3.5

Скрипт под моей редакцией. Версия 3.5 =)
Что сделал:
  • Добавлены кнопки на закупку и обмен (но выбирать магазин нада вручную, не работает таргет =))
  • Подсчет свободных слотов, и закупка в них выбраной шмотки через кнопку
  • Автозакупка свитков после каждой заточки (можно менять задержку, чтобы эмулировать человека )
  • Считалка денег. Считает коэф. для обмена, сколько свитков можно купить на эти деньги, и хватит ли денег на автозакупку.
  • Отключение и включение кнопок в зависимости от текущей операции (Закупка и обмен отключаются когда идет заточка, и когда невозможно закупить или обменять, а старт когда он нажат)
  • База по ID шмоток и свитков - LID, EID (Свитки в базе все, шмот только тот что пока проверял)
  • И первая стадия автономности - Автозакупка шмота когда нечего точить. Сделана на скорую руку, перед сном =)
Как работает:
Обновление инвентаря срабатывает только после 2 нажатий стоп. Как сделать правильно, хз.
Автозакупка сделана криво, через цикл. Сначала проходит мультиселл по циклу на свободные слоты, потом скрипт долго думает, потом начинает добавлять шмот в базу. При этом аж подвисает ПХ.
Вообщем точит по сути пока не закончаться деньги. И еще все время один свиток тратит сразу, и только после этого начинает затачивать. Видимо нада пораньше закупку поставить.
Еще пытался реализовать схему закупки - если диалог открыт, значит сразу посылать мультисел, если нет, открыть и поставить значение открыт. Это чтобы он не посылал запросы байпасс постоянно. Но чет не получилось, оставил как было.

Как должно быть:
Автозакупку через чекбокс. Причем чтобы добавление происходило на каждую шмотку, без тормозов, и он всегда подсчитывал сколько еще слотов свободно.
Адекватная реакция всех кнопок на происходящее. А то у меня сейчас видимо не в тех местах расставлено, и кнопки включаются когда не должны.
Ну и таргет наконец. Тогда он сможет и закупать все, и деньги менять сам. Полностью автономный скрипт =) Вот бы еще клиент не вылетал с ним переодически.
delphi Код:
program Enchant; //............................................ //Список констант const   Name='Char'; //Вписать сюда имя чара   //установить константу в зависимости от типа игры (С4 или Интерлюд)   interlude=true; //Interlude - true, C4 - false   //-------------------------   max=100;     //количество слотов в инвентаре чара   kID=1023000; //смещение C6   Roy=31228;   // Shop ID   Winnie=31229;// Change ID //............................................ //Список переменных var   Item, scrl: integer;   ScrollID, ScrollOID: integer//ScrollID скролла заточки   ItemID,ItemOID: integer;      //ItemID затачиваемого предмета   MaxEnchLvl: integer;         //уровень заточки который требуется достичь   ItemBase:  array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl   ready, add, InBase, CanChange, CanBuy: boolean;   timer: TTimer;   BuyDelay, ScriptDelay: integer;   ItemCount, CurEnchLvl: integer; // Buy Var   Adena, CoL, EmptySlots, CoLChangeCount: integer;   ItemListID, ItemEntryID, BuyItemCount, ItemPrice: integer;   ScrollListID, ScrollEntryID, BuyScrollCount, ScrollPrice: integer;   ItemName, ScrollName: string;   ItemWindowOpened, ScrollWindowOpened: boolean;   MyX, MyY, MyZ, MyOID, ObjectID: integer;       //Статы //   SocialID : integer; // вспомогательная   ItemsName, StringList : TStringList//названия предметов, имена продавцов   FormMain : TForm; //Создаваемая форма   Splitter1 : TSplitter;   Splitter2 : TSplitter;   Stats : TMemo;   Msg : TMemo;   Panel1 : TPanel;   GroupBox2 : TGroupBox;   Label2 : TLabel;   Label4 : TLabel;   Label12 : TLabel;   Label13 : TLabel;   LabelBD : TLabel;   CheckBoxItem : TCheckBox;   ComboBoxItem : TComboBox;   ButtonStartEnchant: TButton;   ButtonStopEnchant : TButton;   ButtonBuyItems    : TButton;   ButtonChangeAdena : TButton;   ButtonBuyScroll   : TButton; //тестовая кнопка   ButtonChangeWindow: TButton; //тестовая кнопка   CheckBoxScroll : TCheckBox;   ComboBoxScroll : TComboBox;   EditItemVal : TEdit;   EditScrollVal : TEdit;   EditScrollOID : TEdit;   EditItemOID : TEdit;   Label1 : TLabel;   Label3 : TLabel;   Edit1 : TEdit;   Edit2 : TEdit;   Edit3 : TEdit; //............................................ //************************************* //Обработчики событий для элементов управления на форме //...................................... //CheckBoxItem procedure CheckBoxItem_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxItem.Checked   then begin     ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];     ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];    if (EmptySlots>0) then begin    ItemIDBase(InBase);     ButtonBuyItems.Enabled:=True;     ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');     stats.Lines.Add(' >'+IntToStr(Adena-(ItemPrice*EmptySlots)));     end    else begin     ButtonBuyItems.Caption:=('Инвентарь полон');    end;     //проверка //    EditItemOID.Text:=Inttostr(ItemID); //    EditItemVal.text:=inttostr(ItemOID);     ComboBoxItem.Enabled:=false; //выключаем    if (ItemID>0) and (ScrollID>0) and CheckBoxScroll.Checked then begin      ButtonStartEnchant.Enabled:=True;      ButtonStartEnchant.ShowHint:=True;     end;   end else begin     ItemID:=0;               //отмена     ItemOID:=0;     ComboBoxItem.Enabled:=true//включаем     ButtonBuyItems.Caption:=('Закупка');     ButtonBuyItems.Enabled:=False;     ButtonStartEnchant.Enabled:=False;     ButtonStartEnchant.ShowHint:=True;     //Пакет RequestItemList     buf:=hstr('0F');     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxItem procedure ComboBoxItem_Click(Sender: TComboBox); //Event : OnClick begin     ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];     ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1]; //    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 var   ScrollToBuy: integer; begin   if CheckBoxScroll.Checked   then begin     ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];     ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];     ItemIDBase(InBase);     ScrollToBuy:=Trunc(Adena/ScrollPrice);     stats.Lines.Add('Автозакупка свитков включена');     stats.Lines.Add((ScrollName)+': '+IntToStr(ScrollPrice)+'А.');     stats.Lines.Add('Аден хватит на '+IntToStr(ScrollToBuy)+' свитков'); //  проверка //    EditScrollOID.Text:=Inttostr(ScrollID); //    EditScrollVal.text:=inttostr(ScrollOID);     ComboBoxScroll.Enabled:=false; //выключаем     if (ItemID>0) and (ScrollID>0) and CheckBoxItem.Checked then begin      ButtonStartEnchant.Enabled:=True;      ButtonStartEnchant.ShowHint:=True;     end;   end else begin     ScrollID:=0;               //отмена     ScrollOID:=0;     ComboBoxScroll.Enabled:=true//включаем     ButtonStartEnchant.Enabled:=False;     ButtonStartEnchant.ShowHint:=True;     //Пакет RequestItemList     buf:=hstr('0F');     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxScroll procedure ComboBoxScroll_Click(Sender: TComboBox); //Event : OnClick begin     ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];     ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1]; //    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);   Edit3.Enabled:=False;   Edit3.ReadOnly:=True;   ButtonBuyItems.Enabled:=False;   ButtonBuyItems.Caption:=('Закупка');   ButtonChangeAdena.Enabled:=False;   ButtonChangeAdena.Caption:=('Обмен');   msg.Lines.Add('Команда Старт!');   ButtonStartEnchant.Enabled:=False;   ButtonStartEnchant.ShowHint:=False;   timer.enabled:=true; end; //...................................... //...................................... //ButtonStopEnchant procedure ButtonStopEnchant_Click(Sender: TButton); //Event : OnClick begin   msg.Lines.Add('Команда Стоп!');   timer.enabled:=false;   ready:=false;   buf:=hstr('0F');   SendToServerEx(Name);   Edit3.Enabled:=True;   Edit3.ReadOnly:=False;   AdenaCounter(CoLChangeCount, CanChange, CanBuy);   if CheckBoxItem.Checked then begin    if (EmptySlots>0) and CanBuy then begin     ButtonBuyItems.Enabled:=True;     ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');     end    else begin     ButtonBuyItems.Enabled:=False;     ButtonBuyItems.Caption:=('Инвентарь полон');    end;   end else begin    ButtonBuyItems.Enabled:=False;    ButtonBuyItems.Caption:=('Закупка');   end;   if not CanChange then begin    ButtonChangeAdena.Enabled:=False;    ButtonChangeAdena.Caption:=('Максимум Аден');   end else begin    ButtonChangeAdena.Enabled:=True;    ButtonChangeAdena.Caption:=('Обменять '+IntToStr(CoLChangeCount*100)+' CoL');   end;   ButtonStartEnchant.Enabled:=True;   ButtonStartEnchant.ShowHint:=True;   ButtonChangeAdena.Enabled:=True; //  ButtonChangeAdena.Caption:=('Обмен'); end; //...................................... //...................................... //ButtonBuyItems procedure ButtonBuyItems_Click(Sender: TButton); //Event : OnClick begin   stats.Lines.Add('Закупка '+(ItemName));   timer.enabled:=false;   ready:=False;   BuyItems(EmptySlots);   ready:=True; end; //...................................... //...................................... //ButtonBuyScroll тестовая procedure ButtonBuyScroll_Click(Sender: TButton); //Event : OnClick begin  ItemIDBase(InBase);  if InBase then BuyScroll; end; //...................................... //...................................... //ButtonChangeWindow тестовая procedure ButtonChangeWindow_Click(Sender: TButton); var Cnt: integer; //Event : OnClick begin  TargetAttacker(ObjectID); end; //...................................... //...................................... //ButtonChangeAdena procedure ButtonChangeAdena_Click(Sender: TButton); //Event : OnClick begin   timer.enabled:=false;   ready:=False;   AdenaCounter(CoLChangeCount, CanChange, CanBuy);   if CanChange then CoLChange;   if not CanChange then begin    ButtonChangeAdena.Enabled:=False;    ButtonChangeAdena.Caption:=('Максимум Аден');   end;   ready:=True; end; //...................................... //...................................... procedure Edit1_Exit(Sender: TEdit); //Event : OnExit begin // end; //...................................... procedure Say(msg:string); begin   buf:=hstr('4A 00 00 00 00');   WriteD(2);   WriteS(Name);   WriteS(msg);   SendToClientEx(Name); end; //...................................... //*************************************************************** //21=RequestBypassToServer:s(Cmd) procedure RequestByPassToServer(cmd:string); begin   buf:=#$21;   WriteS(cmd);   SendToServerEx(Name); end; //...................................... //*************************************************************** procedure RequestMultiSellItem(ListId,EntryID,Count:integer); begin   msg.Lines.Add('Покупаем ListID:'+inttostr(ListID)+' EntryID:'+inttostr(EntryID)+' в кол-ве:'+inttostr(count));   buf:=#$A7;   WriteD(ListID);   WriteD(EntryId);   WriteD(Count);   SendToServerEx(Name); end; //*************************************************************** //*************************************************************** //04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag) procedure Target(ObjectID: Integer); begin   buf:=#$04;   WriteD(ObjectID);   WriteD(MyX);   WriteD(MyY);   WriteD(MyZ);   WriteC(00);   SendToServerEx(Name); end; //...................................... //*************************************************************** procedure TargetAttacker(Attacker: Integer); begin   msg.Lines.Add('ObjectID='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));   timer.enabled:=false;   Target(ObjectID);   delay(800);   Target(ObjectID);   delay(800); end; //...................................... //*************************************************************** procedure ItemIDBase(var InBase: boolean); begin //*** Scroll Base ***  if ScrollID=955 then begin   ScrollListID:=559;   ScrollEntryID:=1;   BuyScrollCount:=1;   ScrollName:=('Enchant Weapon (Grade D)');   ScrollPrice:=50000;   InBase:=True;  end;  if ScrollID=956 then begin   ScrollListID:=559;   ScrollEntryID:=3;   BuyScrollCount:=1;   ScrollName:=('Enchant Armor (Grade D)');   ScrollPrice:=6000;   InBase:=True;  end;  if ScrollID=951 then begin   ScrollListID:=559;   ScrollEntryID:=5;   BuyScrollCount:=1;   ScrollName:=('Enchant Weapon (Grade C)');   ScrollPrice:=110000;   InBase:=True;  end;  if ScrollID=952 then begin   ScrollListID:=559;   ScrollEntryID:=7;   BuyScrollCount:=1;   ScrollName:=('Enchant Armor (Grade C)');   ScrollPrice:=15000;   InBase:=True;  end;  if ScrollID=947 then begin   ScrollListID:=559;   ScrollEntryID:=9;   BuyScrollCount:=1;   ScrollName:=('Enchant Weapon (Grade B)');   ScrollPrice:=500000;   InBase:=True;  end;  if ScrollID=948 then begin   ScrollListID:=559;   ScrollEntryID:=11;   BuyScrollCount:=1;   ScrollName:=('Enchant Armor (Grade B)');   ScrollPrice:=80000;   InBase:=True;  end;  if ScrollID=729 then begin   ScrollListID:=559;   ScrollEntryID:=13;   BuyScrollCount:=1;   ScrollName:=('Enchant Weapon (Grade A)');   ScrollPrice:=5000000;   InBase:=True;  end;  if ScrollID=730 then begin   ScrollListID:=559;   ScrollEntryID:=15;   BuyScrollCount:=1;   ScrollName:=('Enchant Armor (Grade A)');   ScrollPrice:=500000;   InBase:=True;  end;  if ScrollID=959 then begin   ScrollListID:=559;   ScrollEntryID:=17;   BuyScrollCount:=1;   ScrollName:=('Enchant Weapon (Grade S)');   ScrollPrice:=10000000;   InBase:=True;  end;  if ScrollID=960 then begin   ScrollListID:=559;   ScrollEntryID:=19;   BuyScrollCount:=1;   ScrollName:=('Enchant Armor (Grade S)');   ScrollPrice:=1000000;   InBase:=True;  end;  if ScrollID=6575 then begin   ScrollListID:=559;   ScrollEntryID:=21;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Weapon (Grade D)');   ScrollPrice:=500000;   InBase:=True;  end;  if ScrollID=6576 then begin   ScrollListID:=559;   ScrollEntryID:=23;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Armor (Grade D)');   ScrollPrice:=60000;   InBase:=True;  end; if ScrollID=6573 then begin   ScrollListID:=559;   ScrollEntryID:=25;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Weapon (Grade C)');   ScrollPrice:=2000000;   InBase:=True;  end;  if ScrollID=6574 then begin   ScrollListID:=559;   ScrollEntryID:=27;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Armor (Grade C)');   ScrollPrice:=300000;   InBase:=True;  end; if ScrollID=6571 then begin   ScrollListID:=559;   ScrollEntryID:=29;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Weapon (Grade B)');   ScrollPrice:=5000000;   InBase:=True;  end;  if ScrollID=6572 then begin   ScrollListID:=559;   ScrollEntryID:=31;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Armor (Grade B)');   ScrollPrice:=800000;   InBase:=True;  end; if ScrollID=6569 then begin   ScrollListID:=559;   ScrollEntryID:=33;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Weapon (Grade A)');   ScrollPrice:=50000000;   InBase:=True;  end;  if ScrollID=6570 then begin   ScrollListID:=559;   ScrollEntryID:=35;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Armor (Grade A)');   ScrollPrice:=5000000;   InBase:=True;  end; if ScrollID=6577 then begin   ScrollListID:=559;   ScrollEntryID:=37;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Weapon (Grade S)');   ScrollPrice:=100000000;   InBase:=True;  end;  if ScrollID=6578 then begin   ScrollListID:=559;   ScrollEntryID:=39;   BuyScrollCount:=1;   ScrollName:=('Blessed Enchant Armor (Grade S)');   ScrollPrice:=10000000;   InBase:=True;  end; //*** Item Base ***  if ItemID=2407 then begin   ItemListID:=565;   ItemEntryID:=75;   BuyItemCount:=1;   ItemName:=('DC Robe');   ItemPrice:=5080000;  end;  if ItemID=6592 then begin   ItemListID:=558;   ItemEntryID:=41;   BuyItemCount:=1;   ItemName:=('AC Haste');   ItemPrice:=20000000;  end;  if InBase=false then begin   stats.Lines.Add('Неизвестный: '+IntToStr(ItemID));   stats.Lines.Add('Неизвестный: '+IntToStr(ScrollID));  end; end; //************************************************************** procedure BuyScroll; begin  if InBase then begin //  if ItemWindowOpened then begin    RequestByPassToServer('menu_select?ask=-303&reply=559');    delay(500); // Ждем открытия диалога //   ScrollWindowOpened:=True; //   LabelBD.Caption:='Scroll'; //  end; //  if ScrollWindowOpened then begin    delay(BuyDelay);    RequestMultiSellItem(ScrollListID, ScrollEntryID, BuyScrollCount);    delay(BuyDelay); //   ScrollWindowOpened:=True; //  end;  end; end; //*************************************************************** procedure BuyItems(EmptySlots: integer); var   Cnt: integer; begin //ready:=False; //  Диалог закупки оружия if CanBuy then begin  delay(50);  if InBase then begin //  if ScrollWindowOpened then begin    RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));    delay(500); // Ждем открытия диалога //   ItemWindowOpened:=True; //   LabelBD.Caption:='Item'; //  end; //  if ItemWindowOpened then begin    for Cnt:=1 to EmptySlots do begin     delay(10);     RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);     delay(BuyDelay);    end; //   ItemWindowOpened:=True;   end; // end; // ready:=True; end; end; //*************************************************************** procedure AutoBuy; var   Cnt: integer; begin   timer.enabled:=False;   ready:=False;   buf:=hstr('0F');   SendToServerEx(Name);   ItemIDBase(InBase);   RequestByPassToServer('menu_select?ask=-303&reply='+IntToStr(ItemListID));   delay(500); // Ждем открытия диалога   for Cnt:=1 to EmptySlots do begin    delay(10);    RequestMultiSellItem(ItemListID, ItemEntryID, BuyItemCount);    delay(BuyDelay);   end;   CurEnchLvl:=0;   Edit2.text:=inttostr(CurEnchLvl);   Edit3.Enabled:=False;   Edit3.ReadOnly:=True;   delay(10000);   timer.enabled:=True; end; //*************************************************************** procedure AdenaCounter(var CoLChangeCount: integer; var CanChange, CanBuy: boolean); begin   if (Adena>=2000000000) then CanChange:=False;   if (Adena<=1900000000) then begin    CoLChangeCount:=(20-Trunc((Adena/1000000)/100));    CanChange:=True;   end;   if ((Adena-(ItemPrice*EmptySlots))>1) then CanBuy:=True; end; //*************************************************************** procedure CoLChange; var   ALID, AEID, ACnt: integer;   Cnt, CoLChangeCount: integer; begin  AdenaCounter(CoLChangeCount, CanChange, CanBuy);   ALID:=576;   AEID:=3;   ACnt:=100;  if CanChange then begin   ButtonChangeAdena.Enabled:=False;   ButtonChangeAdena.Caption:=('Обмениваем '+IntToStr(CoLChangeCount*100)+' CoL'); //Вызов диалога обмена   delay(50);   RequestByPassToServer('menu_select?ask=-303&reply=576');   delay(500); //Ждем открытия диалога   for Cnt:=1 to CoLChangeCount do begin    RequestMultiSellItem(ALID, AEID, ACnt);    delay(BuyDelay);   end;  end; 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 (NLObP v.0.7) - Shadow Edition v3.5';     Result.Left        := 397;     Result.Top         := 233;     Result.Width       := 681;     Result.Height      := 300;     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   := 230;     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  := 115;     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    := 'Enchant PH Script';     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;     //......................................     //......................................     //LabelBuyDelay     LabelBD := TLabel.Create(Result);     LabelBD.Parent := GroupBox2;     LabelBD.Left    := 161;     LabelBD.Top     := 98;     LabelBD.Width   := 58;     LabelBD.Height  := 13;     LabelBD.Visible := TRUE;     LabelBD.Tag     := 0;     LabelBD.Enabled  := TRUE;     LabelBD.Hint     := 'Задержка при закупке';     LabelBD.ShowHint := True;     LabelBD.Caption     := 'BDelay:';     LabelBD.Transparent := TRUE;     LabelBD.WordWrap    := FALSE;     LabelBD.Alignment   := taLeftJustify;     LabelBD.Layout      := tlTop;     LabelBD.AutoSize    := TRUE;     LabelBD.Align       := alNone;     LabelBD.Font.Name   := 'Tahoma';     LabelBD.Font.Size   := 8;     LabelBD.Font.Color  := clWindowText;     LabelBD.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       := '10';     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;     //......................................     //......................................     //BuyScrollDelay     Edit3 := TEdit.Create(Result);     Edit3.Parent := GroupBox2;     Edit3.Left    := 199;     Edit3.Top     := 95;     Edit3.Width   := 60;     Edit3.Height  := 21;     Edit3.Visible := TRUE;     Edit3.Tag     := 0;     Edit3.Enabled  := TRUE;     Edit3.Hint     := 'Задержка при закупке';     Edit3.ShowHint := TRUE;     Edit3.Text       := '150';     Edit3.Font.Name  := 'Tahoma';     Edit3.Font.Size  := 8;     Edit3.Font.Color := clWindowText;     Edit3.Color        := clWindow;     Edit3.TabOrder     := 5;     Edit3.TabStop      := True;     Edit3.ReadOnly     := False;     Edit3.MaxLength    := 0;     Edit3.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  := False;     ButtonStartEnchant.Hint     := 'Выберите предмет и заточку';     ButtonStartEnchant.ShowHint := True;     ButtonStartEnchant.Caption    := 'Начать';     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    := 'Остановить';     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;     //......................................     //......................................     //ButtonBuyItems     ButtonBuyItems := TButton.Create(Result);     ButtonBuyItems.Parent := GroupBox2;     ButtonBuyItems.Left    := 265;     ButtonBuyItems.Top     := 95;     ButtonBuyItems.Width   := 150;     ButtonBuyItems.Height  := 25;     ButtonBuyItems.Visible := TRUE;     ButtonBuyItems.Tag     := 0;     ButtonBuyItems.Enabled  := False;     ButtonBuyItems.Hint     := 'Закупка предметов';     ButtonBuyItems.ShowHint := False;     ButtonBuyItems.Caption    := 'Закупка';     ButtonBuyItems.Font.Name  := 'Tahoma';     ButtonBuyItems.Font.Size  := 8;     ButtonBuyItems.Font.Color := clWindowText;     ButtonBuyItems.Font.CharSet := 1;     ButtonBuyItems.TabOrder     := 3;     ButtonBuyItems.TabStop      := TRUE;     ButtonBuyItems.Cancel       := FALSE;     ButtonBuyItems.ModalResult  := 0;     ButtonBuyItems.OnClick     := @ButtonBuyItems_Click;     //......................................     //......................................     ButtonBuyScroll := TButton.Create(Result);     ButtonBuyScroll.Parent := GroupBox2;     ButtonBuyScroll.Left    := 91;     ButtonBuyScroll.Top     := 95;     ButtonBuyScroll.Width   := 25;     ButtonBuyScroll.Height  := 25;     ButtonBuyScroll.Visible := TRUE;     ButtonBuyScroll.Tag     := 0;     ButtonBuyScroll.Enabled  := TRUE;     ButtonBuyScroll.Hint     := '';     ButtonBuyScroll.ShowHint := False;     ButtonBuyScroll.Caption    := 'S';     ButtonBuyScroll.Font.Name  := 'Tahoma';     ButtonBuyScroll.Font.Size  := 8;     ButtonBuyScroll.Font.Color := clWindowText;     ButtonBuyScroll.Font.CharSet := 1;     ButtonBuyScroll.TabOrder     := 3;     ButtonBuyScroll.TabStop      := TRUE;     ButtonBuyScroll.Cancel       := FALSE;     ButtonBuyScroll.ModalResult  := 0;     ButtonBuyScroll.OnClick     := @ButtonBuyScroll_Click;     //......................................     //......................................     ButtonChangeWindow := TButton.Create(Result);     ButtonChangeWindow.Parent := GroupBox2;     ButtonChangeWindow.Left    := 91;     ButtonChangeWindow.Top     := 123;     ButtonChangeWindow.Width   := 25;     ButtonChangeWindow.Height  := 25;     ButtonChangeWindow.Visible := TRUE;     ButtonChangeWindow.Tag     := 0;     ButtonChangeWindow.Enabled  := TRUE;     ButtonChangeWindow.Hint     := '';     ButtonChangeWindow.ShowHint := False;     ButtonChangeWindow.Caption    := 'W';     ButtonChangeWindow.Font.Name  := 'Tahoma';     ButtonChangeWindow.Font.Size  := 8;     ButtonChangeWindow.Font.Color := clWindowText;     ButtonChangeWindow.Font.CharSet := 1;     ButtonChangeWindow.TabOrder     := 3;     ButtonChangeWindow.TabStop      := TRUE;     ButtonChangeWindow.Cancel       := FALSE;     ButtonChangeWindow.ModalResult  := 0;     ButtonChangeWindow.OnClick     := @ButtonChangeWindow_Click;     //......................................     //......................................     //ButtonChangeAdena     ButtonChangeAdena := TButton.Create(Result);     ButtonChangeAdena.Parent := GroupBox2;     ButtonChangeAdena.Left    := 265;     ButtonChangeAdena.Top     := 123;     ButtonChangeAdena.Width   := 150;     ButtonChangeAdena.Height  := 25;     ButtonChangeAdena.Visible := TRUE;     ButtonChangeAdena.Tag     := 0;     ButtonChangeAdena.Enabled  := True;     ButtonChangeAdena.Hint     := '';     ButtonChangeAdena.ShowHint := FALSE;     ButtonChangeAdena.Caption    := 'Обменять CoL на Адены';     ButtonChangeAdena.Font.Name  := 'Tahoma';     ButtonChangeAdena.Font.Size  := 8;     ButtonChangeAdena.Font.Color := clWindowText;     ButtonChangeAdena.Font.CharSet := 1;     ButtonChangeAdena.TabOrder     := 3;     ButtonChangeAdena.TabStop      := TRUE;     ButtonChangeAdena.Cancel       := FALSE;     ButtonChangeAdena.ModalResult  := 0;     ButtonChangeAdena.OnClick     := @ButtonChangeAdena_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('Информация по работе скрипта');   stats.Lines.Add('Shadow Edition - Info'); //  stats.Lines.Add('Адены '+IntToStr(Adena)); //  stats.Lines.Add('Coin of Luck '+IntToStr(CoL));   Result.Show; end; //Create_FormMain //======================== //======================== procedure Init; //Вызывается при включении скрипта var   i:integer; begin   FormMain:=Create_FormMain;   //Enchant:=false;   CurEnchLvl:=0;   BuyDelay:=StrToInt(Edit3.Text); //  msg.Lines.Add('Задержка на закупку свитков: '+IntToStr(BuyDelay));   timer:=TTimer.Create(nil);   timer.OnTimer:=@OnTimer;   timer.enabled:=false;   timer.interval:=795; //время задержки   ButtonBuyItems.Enabled:=False; //  ItemWindowOpened:=True; //  if ItemWindowOpened then LabelBD.Caption:=('Item') else LabelBD.Caption:=('Scroll');   ready:=false;   add:=false;   //Пакет RequestItemList   buf:=hstr('0F');   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 //  ItemBase:=nil; //нельзя так делать с массивом   timer.Free;   StringList.Clear;   ItemsName.Clear;   //достаточно освободить форму   Free_FormMain; end; //...................................... //****************************************************************************** //*************************************************************** procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID //1B=ItemListPacket:w(window)w(ListCount)w(itemType1)h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustType2)d(Augment)d(--) var   i, j, ListCount: integer; begin   for i:=1 to max do begin     //очищаем масив     ItemBase[1,i]:=0;     //OID     ItemBase[2,i]:=0;    //ID     ItemBase[3,i]:=0;   //kol-vo     ItemBase[4,i]:=0//lvl   end;   j:=4; //смещение для ListCount   ListCount:=ReadH(j); //количество итемов не должно превышать max!   EmptySlots:=(max-ListCount);   stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));   //if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));   j:=8; //смещение для ObjectID   //Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID   for i:=1 to ListCount do begin     itemBase[1,i]:=ReadD(j);    //OID     itemBase[2,i]:=ReadD(j);   //ItemID     itemBase[3,i]:=ReadD(j)//кол-во     inc(j,10);     itemBase[4,i]:=ReadH(j);//EnchantLevel //    msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));     if interlude then inc(j,12) else inc(j,4);     //msg.Lines.Add('j='+inttostr(j));     if itemBase[2,i]=57 then begin       Adena:=itemBase[3,i];       stats.Lines.Add('Имеется Аден: '+IntToStr(Adena)); //      ButtonChangeAdena.Caption:=('Адены '+IntToStr(Adena));     end;     if itemBase[2,i]=4037 then begin       CoL:= itemBase[3,i];       stats.Lines.Add('Имеется Coin of Luck: '+IntToStr(CoL));     end;   end;   AdenaCounter(CoLChangeCount, CanChange, CanBuy);   if not CanChange then ButtonChangeAdena.Enabled:=False;   if CanChange then ButtonChangeAdena.Caption:=('Обменять '+IntToStr(CoLChangeCount*100)+' CoL');   //вносим изменения в чекбоксы   StringList.Clear;   try     for i:=1 to ListCount do begin       try         //StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря         StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря       except;         msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');       end     end;   except;     msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');     msg.Lines.Add(inttostr(ItemBase[2,i]));     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; //...................................... //****************************************************************************** //27=InventoryUpdate:w(count)w(1add2mod3remove)w(itemType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(cusType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(cusType2)-(8) procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID var   i, ii, j, ItemOID, ItemID, ItemCount, ListCount, UpdType, Itemlvl: integer;   add : boolean; begin   add:=false;   ListCount:=ReadH(2); //количество итемов   //Пробегаем по Инвентарю и сохраняем пары ObjectID - lvl   j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален   for ii:=1 to ListCount do begin     UpdType:=ReadH(j);     //inc(j,2);     ReadH(j);               //ItemType1     ItemOID:=ReadD(j);     //ObjectID     ItemID:=ReadD(j);     //ItemID     itemCount:=ReadD(j); //кол-во     inc(j,10);     Itemlvl:=ReadH(j);     case UpdType of       //добавлен       1: begin          for i:=1 to max do begin            if (ItemBase[1,i]=0) and (add=false) then begin              ItemBase[1,i]:=ItemOID;              ItemBase[2,i]:=ItemID;              ItemBase[3,i]:=ItemCount;              ItemBase[4,i]:=Itemlvl;              msg.Lines.Add('Добавили предмет!');              msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));              if ItemID=57 then begin                Adena:=ItemCount;                stats.Lines.Add('Получено '+IntToStr(Adena)+' Аден');              end;              if ItemID=4037 then begin                CoL:=ItemCount;                stats.Lines.Add('Получено '+IntToStr(CoL)+' Coin of Luck');              end;              add:=true;            end;          end;       end;       //изменен       2: begin          for i:=1 to max do begin            if ItemBase[1,i]=ItemOID then begin              ItemBase[2,i]:=ItemID;               ItemBase[3,i]:=ItemCount;              ItemBase[4,i]:=Itemlvl;              msg.Lines.Add('Изменяем параметры предмета!');              msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));              if ItemID=57 then begin                Adena:=ItemCount;                stats.Lines.Add('Адены '+IntToStr(Adena));              end;              if ItemID=4037 then begin                CoL:=ItemCount;                stats.Lines.Add('Coin of Luck '+IntToStr(CoL));              end;            end;          end;       end;       //удален       3: begin          for i:=1 to max do begin            if ItemBase[1,i]=ItemOID then begin              msg.Lines.Add('Удаляем предмет!');              msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));              ItemBase[1,i]:=0;              ItemBase[2,i]:=0;              ItemBase[3,i]:=0;              ItemBase[4,i]:=0; //             if i=13 then begin //               Adena:=ItemBase[3,i]; //             end;            end;          end;       end;     end;     if interlude then inc(j,10) else inc(j,2);     //msg.Lines.Add('j='+inttostr(j));   end; end; //...................................... //****************************************************************************** //находим в инвентаре предмет с ItemID и возвращаем его ObjectID function GetItem(item:integer; lvl:integer) : integer; var   i : integer; begin   for i:=1 to max do begin     //находим подходящий предмет по ItemID     if (ItemBase[2,i]=item) and (ItemBase[4,i]=lvl) then begin       //если нашли, то возвращаем ObjectID предмета       result:=ItemBase[1,i]; // itemOID       ItemCount:=ItemBase[3,i];       //Itemlvl:=ItemBase[4,i];       //msg.Lines.Add('<item='+inttostr(item)+' lvl='+inttostr(lvl)+'> i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));       exit;     end;   end;   //ничего не нашли   result:=0; end; //...................................... //****************************************************************************** procedure UseItem(ObjectID: integer); begin   buf:=#$14;   WriteD(ObjectID);   WriteD(0);   SendToServerEx(Name); end; //...................................... //****************************************************************************** function SumItem(Item: integer):integer; var   sum, i: integer; begin   result:=0;   //находим подходящий предмет по ItemID   for i:=1 to max do begin     if (ItemBase[2,i]=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+ItemBase[3,i];       //inc(result);     end;   end; end; //...................................... //****************************************************************************** procedure RequestEnchantItem(ObjectID: integer); begin   buf:=#$58;   WriteD(ObjectID);   SendToServerEx(Name);   //*********** использовать чит с петом ************************ {  buf:=#$8B;   WriteD(ObjectID);   writed(1);   SendToServerEx(Name); }  //*********** end; //...................................... procedure UserInfo; //обновление данных о себе var   i:word; begin   MyOID:=ReadD(18);   MyX:=ReadD(2);   MyY:=ReadD(6);   MyZ:=ReadD(10);   i:=22;   ReadS(i);   if interlude then inc(i,48) else inc(i,44); end; {//*************************************************************** function ExtractIDValues(sData: string): integer; var   s: string;   i,j: integer; begin   i:=0;   s:=sData;   i:=pos('=',s);   if i>=0 then     s:=copy(s,1,i-1);   try     result:=strtoint(s);   except     result:=0;   end; end; //............................................} //****************************************************************************** procedure OnTimer(Sender: TObject); begin   EditItemVal.text:=inttostr(sumitem(ItemID));   EditScrollVal.text:=inttostr(sumitem(ScrollID));   if (Adena<=1000000) then begin     msg.Lines.Add('Деньги закончились! Прервано!');     stats.Lines.Add('Деньги закончились!');     timer.enabled:=false;    exit;   end;   if (CurEnchLvl>=StrToInt(Edit1.Text)) then begin     msg.Lines.Add('Нечего точить! Прервано!');     timer.enabled:=false;   //Пакет RequestItemList     buf:=hstr('0F');     SendToServerEx(Name);     delay(50);     stats.Lines.Add('Свободно слотов: '+IntToStr(EmptySlots));    if (EmptySlots>0) then begin     ButtonBuyItems.Enabled:=True;     ButtonBuyItems.Caption:=((ComboBoxItem.Text)+': '+IntToStr(EmptySlots)+'шт.');    end;    AutoBuy; //   BuyItems(EmptySlots); //   delay(100); //   ready:=True; //   timer.enabled:=True; //   exit;   end;   if (sumitem(ItemID)<=5) then begin //  if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь     msg.Lines.Add('Прервано! Покупаем еще.');     timer.enabled:=false;     buf:=hstr('0F');     SendToServerEx(Name);     delay(50);     AutoBuy; //    exit;   end;   ScrollOID:=GetItem(ScrollID,0);   if (ScrollOID<=2) then begin     stats.Lines.Add('Свитки закончились! Прервано!');     timer.enabled:=False; //***** Закупка заточек *    RequestByPassToServer('menu_select?ask=-303&reply=559');    delay(500); // Ждем открытия диалога    RequestMultiSellItem(ScrollListID, ScrollEntryID, BuyScrollCount);    delay(BuyDelay); //***********************     timer.enabled:=True;     //exit;   end;   UseItem(ScrollOID);   msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));   ready:=true; //готовы затачивать end; //****************************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //****************************************************************************** begin   //****************************************************************************   //не обрабатываем пустые пакеты   if pck='' then exit;   if FromServer then   case pck[1] of     //***************************************************************      #$01: begin      // MoveBackwardToLocation            if ReadD(2) = MyOID then begin              MyX := ReadD(18);              MyY := ReadD(22);              MyZ := ReadD(26);             end;             //stats.Lines.Add('X'+IntToStr(MyX)+', Y'+IntToStr(MyY)+', Z'+IntToStr(MyZ));            end;      //***************************************************************     #$04: begin //пакет с инфой о моём чаре         //msg.Lines.Add('S>Пакет UserInfo #$04');            UserInfo;           end;     //......................................     //Пакет ItemList     #$1B: CreateItemBase; //создание базы предметов      //......................................     //если удалили предметы, стираем в базе предметов пары ObjectID - ItemID     #$27: InventoryUpdate; //Обновление базы      //......................................     #$16: begin            ObjectID:=(ReadD(2));            stats.Lines.Add('S> OID '+IntToStr(ObjectID)+', ID '+IntToStr(ReadD(6)));        //        OID       ID //      AppendNpc(ReadD(2), ReadD(6)); //добавляем в базу данных       if (Roy=ReadD(6)-kID) then stats.Lines.Add('Roy OID='+IntToStr(ObjectID));       if (Winnie=ReadD(6)-kID) then stats.Lines.Add('Winnie OID='+IntToStr(ObjectID)); //        EditFishermanOID.text:=inttostr(ReadD(2)); //        FishermanOID:=strtoint(EditFishermanOID.text); //       end;       end;     //Пакет ChooseInventory     #$6F: if ready then begin //and (readd(2)=itemid)       //ищем подходящий предмет для заточки       timer.enabled:=false; //отключаем пока не найдем предмет для заточки       repeat         ItemOID:=GetItem(ItemID,CurEnchLvl);         if ItemOID=0 then begin           inc(CurEnchLvl);           Edit2.text:=IntToStr(CurEnchLvl);         end;       until ItemOID<>0;       //************************************************ //***** Закупка заточек *       if InBase then BuyScroll; //***********************       msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));       RequestEnchantItem(ItemOID);       ready:=false;       timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)     end;     #$81: if readd(2)=0 then begin           CurEnchLvl:=0; //начнем с начала     end;   end; end.
2 NLObP
Понатыкал где мог, чтобы обновлять инфу об инвентаре перед закупкой:
//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
Где его по нормальному нада ставить?
__________________
Shadows anywhere...

Последний раз редактировалось Shadow, 11.08.2008 в 15:19.
Shadow вне форума   Ответить с цитированием
За это сообщение Shadow нажился 2 спасибками от: