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

Жесткий скриптинг Раздел для обсуждения готовых и тестируемых скриптов
Внимание! В разделе введена жесткая модерация, темы и сообщения публикуются только после проверки модераторами

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 11.01.2008, 04:07   #1
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Скрипт на рыбалку

Не пишите по несколько раз вопросы. Тема премодерируемая и пока модератор не посмотрит, сообщение не появиться.

Выкладываю мою версию рыбалки: fishing_by_NLObP.zip

//Автоматизация ловли рыбы by NLObP для L2PacketHack v.3.5+ by Xkor
//version 0.10.11 от 26.07.2009г.

Возможности скрипта:
Оффтоп

Спасибо Xkor за пакетхак!
Спасибо участникам форума CoderX.ru за идеи для скрипта!

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

MyICQ 402988808

by APXAHGEJI
Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.

Ниже прикреплены скрипты
Так выглядит панель управления скриптом
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 3844
Размер:	64.8 Кб
ID:	34  
Вложения
Тип файла: rar by_APXAHGEJI.rar (21.7 Кб, 581 просмотров)
Тип файла: rar fishing_by_NLObP_10_7.rar (280.2 Кб, 433 просмотров)
Тип файла: rar fishing_by_NLObP_10_8_2.rar (240.9 Кб, 804 просмотров)

Последний раз редактировалось NLObP, 01.08.2009 в 02:45. Причина: обновление скрипта
NLObP вне форума   Ответить с цитированием
Старый 02.10.2008, 17:37   #31
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от Murdoc Посмотреть сообщение
Новая порция вопросов
скрипт на хеллбаунде работать будет? Интересует только та часть что просто рыбачить, дерется с мобом, лечится, репозиционируется(о словечко то!!!) после боя
Нужны ли какие то изменения, какие параметры?
Нужны. Как минимум, ID пакетов другие.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 03.10.2008, 04:06   #32
Пользователь
 
Аватар для APXAHGEJI
 
Регистрация: 08.03.2008
Сообщений: 77
Сказал Спасибо: 31
Имеет 19 спасибок в 15 сообщенях
APXAHGEJI
По умолчанию

Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.
Delphi Код:
//Автоматизация ловли рыбы by NLObP для L2PacketHack v.3.1.8+ by Xkor //version 0.10.7 от 26.07.2008г. program Fishing_C4_IL; {                                            А.Пушкин "Сказка о рыбном четверге" ******************************************************************************** Возможности скрипта: -------------------- 0.10.1 - Контроль рыбалки с панели управления; - Статистика ловли; - Может работать одновременно несколько скриптов для разных чаров; - При нападении моба может атаковать его и может лечиться бутылками; - Потрошит пойманную рыбу; - Подбирает выпавшие предметы из убитого моба; - Возвращается на место рыбалки после смерти; - Когда закончатся крючки, бежит к фишермэну и продает/покупает/обменивает предметы   (продажа Fish Oil и Great Fish Oil не производится, см. ниже); - Меняет место ловли при неудачных попытках (в скрипте три места ловли); - В процессе рыбалки преобразует Fish Oil в Great Fish Oil, Great Fish Oil в Premium   Fish Oil (требуются соответствующие рецепты). 0.10.2 + проверка на то, что мы действительно рыбачим, с репозицией; + проверка на застревание с возвратом на одну позицию назад; 0.10.3 + правильно работает остановка рыбалки (Stop); + возобновляет рыбалку если моб исчез сам; + исправлено лечение бутылками; + исправлена репозиция; + показывает количество HP напавшего моба. 0.10.4 + by MHz: Попробовав юзать твой скрипт с ботом L2Jes столкнулся с тем, что   полностью полагаться на пакет клиента 48 - ValidatePosition нельзя, поэтому   предлагаю дополнительно подтверждать свои координаты из пакета сервера   01 MoveBackwardToLocation. 0.10.5 + сменил код выбора ItemID предметов; + если не выбрали продавца, то по окончанию крючков продовать не бежим; 0.10.6 + рефакторинг кода; + вроде нашел место где после боя останавливается; 0.10.7 + добавил отключение клиента (социал YES); ================================================================================ Проверялось на TheAbyss.ru x300(interlude) и локальном сервере (interlude) ================================================================================ Перед использованием скрипта изменяем под свой сервер, один раз: - Name='имя своего чара'; - изменить перемещение к месту ловли (Mestolovli), смена места ловли (MenayemMesto),   репозицию после боя (Reposition); - изменить константы при необходимости:   //установить константу в зависимости от типа игры (С4 или Интерлюд)   interlude=true; //Interlude - true, C4 - false   java=false;    //PTS - false, Java - true   debug=false;  //если не хотим видеть отладочной информации   //оставить один из них или поставить свой   kID=1000000;  //коэфф вычитаемый из NpcID C4 lagam.net   kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru 1) - покупаем удочку, крючки и при необходимости фишин-шоты; - учим соответствующие скилы рыбалки; - при желании защищаться - купить подходящее оружие, щит, соулшоты. 2) каждый раз для инициализации скрипта: - запускаем скрипт (ставим галочку); - ставим галочи в панели управления напротив необходимых позиций; - становимся перед фишермэном, выбираем первое место ловли, жмем GO; - чар сам идет на место рыбалки; - дождавшись прихода на место ловли жмем START; - при необходимости, включть соулшоты в автоматический режим. Примечание: - ловить лучше всего гномом; - пути движения к местам ловли начинать от фишермэна; - путь движения после смерти начинается с места появления после смерти. На Абисе S>Пакет UserInfo #$04 очень тяжело дождаться, а он нужен для инициализации скрипта. Нужно купить или продать не нужную вещицу и Пакет UserInfo #$04 прийдет от сервера. На  lagam.net(c4) проще, открываем инвентарь, сняли/одели оружие. Скрипт настроен под определённое место. Для других мест нужно изменить перемещение к месту рыбалки, смену места рыбалки, репозицию после боя, путь после смерти (в скрипте зашито три места ловли). Теперь это сделать очень легко! Спасибо Alexsl!                       Спасибо Xkor за пакетхак!           Спасибо участникам форума CoderX.ru за идеи для скрипта! Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя. MyICQ 402988808 ********************************************************************************} const                    //имя чара для которого включаем скрипт   Name='НикЧара';   //<------------------------------  //kID=1000000; //коэфф вычитаемый из NpcID C4  lagam.net   kID=1023000; //коэфф вычитаемый из NpcID C6 theAbyss.ru   //сюда вписываем ItemID предметов для автопродажи   TradeSellItem=[7686,7698,7697,6527,6521];   //количество предметов в массиве TradeSellItem   TradeSellItemCount=5;   //-----------------------------TradeBuyItem=[MyLureID];   TradeBuyItemCount=1;   //сюда вписываем ItemID предметов для автообмена   TradeMultiItem=[6908,6909,6910,6911,6912,6913,6914,6915,6916]; //нельзя изменять, собъется обмен!   //количество предметов в массиве TradeMultiItem   TradeMultiItemCount=9;//нельзя изменять, собъется обмен!   FO=6908; //запомним, чтобы отменять обен на пруфы   GFO=6909;   //установить константу в зависимости от типа игры (С4 или Интерлюд)   interlude=true; //Interlude - true, C4 - false   java=false;    //PTS - false, Java - true   debug=false//если не хотим видеть отладочной информации   //эта переменная указывает уничтожить пакет или нет если он обработан   //может данные нужны для других скриптов   EraseCommandFromChat=true;   //***************************************************************   fish=1312;   //ID fishing   pump=1313//ID pumping   reel=1314; //ID reeling   //******************************************************* //  RecordFilesPath='.\scripts\fishing\TALKIN_ISLAND\'; //путь где хранятся наши файлы   RecordFilesPath='.\scripts\fishing\giran_harbor2\'; //путь где хранятся наши файлы   RecordPathName='Mestolovli1'; //файл по умолчанию   RecordFileExt='.txt';//расширение по умолчанию   RangeToCheckPoint=150;//дистанция до чекпоинта при которой считается , что мы достигли оного   MoveTrigerDelay=1000; //срабатывание таймера на движение  0,8 сек   cmdPrefix='===';     //с этих символов начинается команда   cmdDlm   =' ';       //разделитель параметров команды, параметры не должены содержать разделитель   //команды в общий чат                        //пример   cmdRecordPath='rec'; //в общий чат "===rec giran1"   cmdSavePath='save'//в общий чат "===save"   cmdMove='go';        //в общий чат "===go giran1"   cmdBack='back';      //в общий чат "===back giran1"   cmdStop='stop';      //останавливает следование по маршруту   maxitems=250;        //max количество предметов в базе   maxnpc=50;           //max количество контролируемых NPC   go=true; //бежать от продавца на место ловли   back=false; //бежать от места ловли к продавцу //*************************************************************** var   getbuylist, getselllist,  getmultisell : string;   PercentHP : integer//при каком количестве HP в % юзать бутылку лечения   WeaponUse1 : boolean; //использовать оружие? true-да, false-нет   ShieldUse1 : boolean; //использовать щит? true-да, false-нет   HPuse1 : boolean;     //использовать ли бутылки лечения? true-да, false-нет   ShotUse1 : boolean;   //использовать ли фишин-шоты? true-да, false-нет   TradeBuyItem:  array[0] of integer; //что надо купить [MyLureID];   NpcBase:  array[1..2,1..maxnpc] of integer//все NPC вокруг   KolvoNpc : integer; //количество Npc в базе {   1 - OID   2 - ID }   ItemBase:  array[1..4,1..maxitems] of integer//все предметы в инвентаре   ItemBase2:  array[1..4,1..maxitems] of integer; //найденные по ItemID {   1 - ObjectID   2 - ItemID   3 - ItemCount   4 - IsEquipped }   MestoLovli, PMMesto, MMesto : integer;   isDie, isFishing, isEquipRod, isEquipLure, isEquipWpn: boolean;   NeedBuy, FishermanOID, ListID, ColvoItm, ColvoItm2, SocialID : integer;   ReadyToBuy, ReadyToSell, ReadyToMultiSell, add, CanFishHere : boolean;   trd, TradeCount, TradeID, EndTradeID, UpdType, ItemOID, ItemID, colv, trade: integer;   lucky1, failed1, fish1, fish2, mob1, death1: integer;   StartTime, EndTime: TDateTime;   fishin, ShowInf, MoveTimer, Trade1, CreatePFO: TTimer;   //здесь ID вещей которыми пользуемся при рыбалке   MyWeaponID : integer//2500 (Dark Legion's Edge) 295 (Dwarven Trident)   MyShieldID : integer//0 - не используем!   MyRodID : integer;     //6529 (Baby Duck Rod)   MyLureID : integer;    //7807 (Green Colored Lure - For Beginners)   MyShotID : integer;    //6536 (Fishing Shot: D-grade)   MyHPID : integer;      //1060=Lesser Healing Potion   FishermanID : integer; //8573; //Фишерман Monakan в Гиран-харборе   HPOID, ColvoHP, RodOID, LureOID, ColvoLure, ShotOID, ColvoShot : Integer;   iii, i, j: integer;   //защита от мобов   WeaponID, ShieldID, WeaponOID, ShieldOID : Integer;   but: integer ;   Lure1, Rod1, distanciya, status : boolean;   underAttack, HPuse2, Weapon2, Shield2, Lure2, Rod2, Shot2 : boolean;   //movement data   MovePath,                   //данные по которому мы будем двигатся в данный момент   RecordPath,                 //данные для записи пути   ItemsName, NpcsName, StringList, StringList2 : TStringList//названия предметов, имена продавцов   Cmd,                        //команда на определенное действие 'fishing' 'trade' 'death' 'move'   RecordPathFileName: string; //название файла для записи   PointsCount: integer;       //кол-во поинтов в процессе записи пути   SavePathEnabled: boolean;   //флаг записи пути   MoveToPathEnabled: boolean; //флаг движения по пути   MoveToForward: boolean;     //направление движения да-вперед, нет - назад   MoveStepIndex: integer;     //текущ. чекпоинт (куды бежим сейчас)   old_X,old_Y,old_Z,old_time,chk_time: integer;   stop : boolean;   myX,myY,myZ: integer;       //наши статы   myOID,myHP,myMP,myMaxHP,myMaxMP: integer;   AttackerID, AttackerOID,AttackerX,AttackerY,AttackerZ,AttackerMaxHP,AttackerHP : integer;   NetPing: string; // здесь запомним Нетпинг от клиента, будем сами его посылать   LogOutOk: boolean; // флаг показывающий, что мы отключили клиент //............................................ //Список переменных формы   FormMain : TForm; //Создаваемая форма   Splitter1,Splitter2 : TSplitter;   Panel1 : TPanel;   ButtonPathBack,ButtonPathStop,ButtonPathGo,ButtonPathSave,ButtonPathRec,   ButtonFishingStart,ButtonFishingStop : TButton;   GroupBox1,GroupBox2,GroupBox3,GroupBox4 : TGroupBox;   Label1,Label2,Label4,Label5,Label6,Label7,Label12,Label13,Label8,Label9,Label17,   Label10,Label11,Label3,Label14,Label15 : TLabel;   CheckBoxRod,CheckBoxLure,CheckBoxWeapon,CheckBoxShield,CheckBoxFShot,CheckBoxFO,CheckBoxPU,   CheckBoxFisherman,CheckBoxHPotion : TCheckBox;   ComboBoxPath,ComboBoxRod,ComboBoxFShot,ComboBoxLure,ComboBoxWeapon,ComboBoxShield,   ComboBoxFisherman,ComboBoxHPotion : TComboBox;   EditPath,EditRodVal,EditLureVal,EditWeaponVal,EditShieldVal,EditFShotVal,   EditLureOID,EditWeaponOID,EditShieldOID,EditFShotOID,EditRodOID,EditFishermanOID,   EditLure,EditHealt,EditHpotionOID,EditHPotionVal : TEdit;   Stats,  Msg : TMemo;   pbMyHP,pbMyMP,pbTargetHP:TProgressBar;   gbMyPanel,gbTargetPanel,gbMyCP,gbMyHP,gbMyMP,gbTargetHP:TGroupBox; //............................................ //для Пакетхак v.3.1.9+ //*************************************************************** procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения begin // не срабатывает! //  NoFreeOnClientDisconnect; //  NoFreeOnServerDisconnect; end; //..................... //....................... //*************************************************************** //Вызывается при включении скрипта //*************************************************************** procedure Init; begin   FormMain:=Create_FormMain;   if not java then begin     //C4 lagam.net и C6 theAbyss.ru     getselllist:='menu_select?ask=-1&reply=8';     getbuylist:='menu_select?ask=-1&reply=0';     getmultisell:='menu_select?ask=-303&reply=517';     //для java getselllist в пакете NpcInfo   end;   PMMesto:=50; //количество сорвавшихся рыб, для начала смены места ловли   MMesto:=0//здесь будем подсчитывать сорвавшуюся рыбу, для смены позиции   MestoLovli:=1; //номер места позиции ловли 1..3   lucky1:=0;   failed1:=0;   fish1:=0;   fish2:=0;   mob1:=0;   death1:=0;   FishermanOID:=0;   CanFishHere:=true; //здесь можно ловить   ReadyToBuy:=false;   ReadyToSell:=false;   ReadyToMultiSell:=false;   stop:=false; //нажали кнопку STOP?   isFishing:=false; //ловим?   StartTime:=time;   ShotOID:=0;   LureOID:=0;   Status:=false;   rod1:=true;   lure1:=true;   HPuse2:=false;     //задействовано true-да, false-нет   weapon2:=false;   shield2:=false;   rod2:=false;   lure2:=false;   Shot2:=false;   underattack:=false; //атакован?   RecordPathFileName:='';   //RequestItemList вызываем инвентарь   buf:=hstr('14');///////////////////////////////////////////////////////////////////////////////////////   SendToServerEx(Name);   RecordPath:=TStringList.Create;   MovePath:=TStringList.Create;   ItemsName:=TStringList.Create;   NpcsName:=TStringList.Create;   StringList:=TStringList.Create;   StringList2:=TStringList.Create;   try     ItemsName.LoadFromFile(RecordFilesPath+'itemsid.ini');   except     msg.Lines.Add(RecordFilesPath+'itemsid.ini не найден!');     exit;   end;   try     NpcsName.LoadFromFile(RecordFilesPath+'npcsid.ini');   except     msg.Lines.Add(RecordFilesPath+'npcsid.ini не найден!');     exit;   end;   with ComboBoxFisherman do   begin     Items.Clear;     Items.Assign(NpcsName);     ItemIndex:=0;   end;   //таймеры, можно поправить время по обстоятельствам   MoveTimer:=TTimer.Create(nil);   MoveTimer.Enabled:=False;   MoveTimer.Interval:=MoveTrigerDelay;   MoveTimer.OnTimer:=@OnMove;   trade1:=TTimer.Create(nil);   trade1.OnTimer:=@OnTrade;   trade1.enabled:=false;   trade1.interval:=1000; //время задержки   fishin:=TTimer.Create(nil);   fishin.OnTimer:=@OnFishing;   fishin.enabled:=false;   fishin.interval:=3000; //время задержки   ShowInf:=TTimer.Create(nil);   ShowInf.OnTimer:=@OnShowInfo;   ShowInf.enabled:=true;   ShowInf.interval:=1000; //время задержки   CreatePFO:=TTimer.Create(nil);   CreatePFO.OnTimer:=@OnCreatePFO;   CreatePFO.enabled:=false;   CreatePFO.interval:=300000; //время задержки 5 мин   WeaponUse1:=false;   ShieldUse1:=false;   HPuse1:=false;   ShotUse1:=false;   //PercentHP:=70;   //здесь ID   MyWeaponID:=0;   MyShieldID:=0;   MyRodID:=0;   MyLureID:=0;   MyShotID:=0;   MyHPID:=0;   FishermanID:=0; end; //............................................ //*************************************************************** //Вызывается при выключении скрипта //*************************************************************** procedure Free; begin   ItemBase:=nil;  ItemBase2:=nil;   //таймеры   ShowInf.Enabled:=false;  ShowInf.Interval:=0;  ShowInf.Free; ShowInf.OnTimer:=nil;   fishin.Enabled:=false;  fishin.Interval:=0;  fishin.Free; fishin.OnTimer:=nil;   trade1.Enabled:=false;  trade1.Interval:=0;  trade1.Free; trade1.OnTimer:=nil;   createpfo.Enabled:=false;  createpfo.Interval:=0;  createpfo.Free; createpfo.OnTimer:=nil;   movetimer.Enabled:=false;  movetimer.Interval:=0;  movetimer.Free; movetimer.OnTimer:=nil;   WeaponOID:=0;  ShieldOID:=0;  HPOID:=0;  RodOID:=0;  LureOID:=0;  ShotOID:=0;   ColvoLure:=0;  ColvoShot:=0;   if RecordPath<>nil then   try     RecordPath.Free;   except     debugmsg('error free RecordPath');   end;   if MovePath<>nil then   try     MovePath.Free;   except     debugmsg('error free MovePath');   end;   if ItemsName<>nil then   try     ItemsName.Free;   except     debugmsg('error free ItemsName');   end;   if NpcsName<>nil then   try     NpcsName.Free;   except     debugmsg('error free NpcName');   end;   if StringList<>nil then   try     StringList.Free;   except     debugmsg('error free StringList');   end;   if StringList2<>nil then   try     StringList2.Free;   except     debugmsg('error free StringList2');   end;   //достаточно освободить форму   Free_FormMain;   //отключение клиента   YesFreeOnClientDisconnect;   YesFreeOnServerDisconnect; 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     := 'FishingBot by NLObP v.0.10.7';     Result.Left        := 397;     Result.Top         := 233;     Result.Width       := 620;     Result.Height      := 730;     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;     //......................................     //......................................     //Panel1     Panel1 := TPanel.Create(Result);     Panel1.Parent := Result;     Panel1.Left    := 0;     Panel1.Top     := 0;     Panel1.Width   := 425;     Panel1.Height  := 471;     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     := 0;     Panel1.TabStop      := FALSE;     Panel1.AutoSize     := FALSE;     //......................................     //=============== My Attr Panel ========     gbMyPanel:=TGroupBox.Create(Panel1);     gbMyPanel.parent:=Panel1;     gbMyPanel.caption:=' ['+Name+'] ';     gbMyPanel.ShowHint:=true;     gbMyPanel.Hint:=' ['+Name+'] ';     gbMyPanel.height:=115;     gbMyPanel.width:=210;     gbMyPanel.left:=1;     gbMyPanel.top:=420;     //......................................     //==================== HP ==============     gbMyHP:=TGroupBox.Create(gbMyPanel);     gbMyHP.parent:=gbMyPanel;     gbMyHP.Color:=clRed;     gbMyHP.caption:=' HP:    0/0     ';     gbMyHP.height:=33;     gbMyHP.width:=200;     gbMyHP.left:=5;     gbMyHP.top:=14;     //......................................     pbMyHP:=TProgressBar.Create(gbMyPanel);     pbMyHP.parent:=gbMyPanel;     pbMyHP.smooth:=true;     pbMyHP.max:=1200;     pbMyHP.min:=0;     pbMyHP.position:=0;     pbMyHP.step:=10;     pbMyHP.height:=16;     pbMyHP.width:=190;     pbMyHP.left:=10;     pbMyHP.top:=26;     //......................................     //==================== MP ==============     gbMyMP:=TGroupBox.Create(gbMyPanel);     gbMyMP.parent:=gbMyPanel;     gbMyMP.Color:=$FF7000;     gbMyMP.caption:=' MP:    0/0     ';     gbMyMP.height:=33;     gbMyMP.width:=200;     gbMyMP.left:=5;     gbMyMP.top:=50;     //......................................     pbMyMP:=TProgressBar.Create(gbMyPanel);     pbMyMP.parent:=gbMyPanel;     pbMyMP.smooth:=true;     pbMyMP.max:=1200;     pbMyMP.min:=0;     pbMyMP.position:=0;     pbMyMP.step:=10;     pbMyMP.height:=16;     pbMyMP.width:=190;     pbMyMP.left:=10;     pbMyMP.top:=62;     //......................................     //================== Target Info Panel =     gbTargetPanel:=TGroupBox.Create(Panel1);     gbTargetPanel.parent:=Panel1;     gbTargetPanel.caption:=' [TargetName] ';     gbTargetPanel.ShowHint:=true;     gbTargetPanel.Hint:=' [TargetName] ';     gbTargetPanel.height:=115;     gbTargetPanel.width:=210;     gbTargetPanel.left:=212;     gbTargetPanel.top:=420;     //......................................     //==================== HP ==============     gbTargetHP:=TGroupBox.Create(gbTargetPanel);     gbTargetHP.parent:=gbTargetPanel;     gbTargetHP.Color:=clRed;     gbTargetHP.caption:='           HP:        0/0          ';     gbTargetHP.height:=33;     gbTargetHP.width:=200;     gbTargetHP.left:=5;     gbTargetHP.top:=14;     //......................................     pbTargetHP:=TProgressBar.Create(gbTargetPanel);     pbTargetHP.parent:=gbTargetPanel;     pbTargetHP.smooth:=true;     pbTargetHP.max:=1200;     pbTargetHP.min:=0;     pbTargetHP.position:=0;     pbTargetHP.step:=10;     pbTargetHP.height:=16;     pbTargetHP.width:=190;     pbTargetHP.left:=10;     pbTargetHP.top:=26;     //......................................     //......................................     //GroupBox1     GroupBox1 := TGroupBox.Create(Result);     GroupBox1.Parent := Panel1;     GroupBox1.Left    := 1;     GroupBox1.Top     := 343;     GroupBox1.Width   := 421;     GroupBox1.Height  := 76;     GroupBox1.Visible := TRUE;     GroupBox1.Tag     := 0;     GroupBox1.Enabled  := TRUE;     GroupBox1.Hint     := '';     GroupBox1.ShowHint := FALSE;     GroupBox1.Caption    := 'Создание путей движения';     GroupBox1.Align      := alNone;     GroupBox1.Color      := clBtnFace;     GroupBox1.Font.Name  := 'Tahoma';     GroupBox1.Font.Size  := 8;     GroupBox1.Font.Color := clWindowText;     GroupBox1.Font.CharSet := 1;     GroupBox1.TabOrder     := 0;     GroupBox1.TabStop      := FALSE;     //......................................     //......................................     //Label1     Label1 := TLabel.Create(Result);     Label1.Parent := GroupBox1;     Label1.Left    := 3;     Label1.Top     := 18;     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;     //......................................     //......................................     //ButtonPathBack     ButtonPathBack := TButton.Create(Result);     ButtonPathBack.Parent := GroupBox1;     ButtonPathBack.Left    := 265;     ButtonPathBack.Top     := 42;     ButtonPathBack.Width   := 75;     ButtonPathBack.Height  := 25;     ButtonPathBack.Visible := TRUE;     ButtonPathBack.Tag     := 0;     ButtonPathBack.Enabled  := TRUE;     ButtonPathBack.Hint     := '';     ButtonPathBack.ShowHint := FALSE;     ButtonPathBack.Caption    := 'Back';     ButtonPathBack.Font.Name  := 'Tahoma';     ButtonPathBack.Font.Size  := 8;     ButtonPathBack.Font.Color := clWindowText;     ButtonPathBack.Font.CharSet := 1;     ButtonPathBack.TabOrder     := 0;     ButtonPathBack.TabStop      := TRUE;     ButtonPathBack.Cancel       := FALSE;     ButtonPathBack.ModalResult  := 0;     ButtonPathBack.OnClick     := @ButtonPathBack_Click;     //......................................     //......................................     //ButtonPathStop     ButtonPathStop := TButton.Create(Result);     ButtonPathStop.Parent := GroupBox1;     ButtonPathStop.Left    := 343;     ButtonPathStop.Top     := 42;     ButtonPathStop.Width   := 75;     ButtonPathStop.Height  := 25;     ButtonPathStop.Visible := TRUE;     ButtonPathStop.Tag     := 0;     ButtonPathStop.Enabled  := TRUE;     ButtonPathStop.Hint     := '';     ButtonPathStop.ShowHint := FALSE;     ButtonPathStop.Caption    := 'Stop';     ButtonPathStop.Font.Name  := 'Tahoma';     ButtonPathStop.Font.Size  := 8;     ButtonPathStop.Font.Color := clWindowText;     ButtonPathStop.Font.CharSet := 1;     ButtonPathStop.TabOrder     := 1;     ButtonPathStop.TabStop      := TRUE;     ButtonPathStop.Cancel       := FALSE;     ButtonPathStop.ModalResult  := 0;     ButtonPathStop.OnClick     := @ButtonPathStop_Click;     //......................................     //......................................     //ButtonPathGo     ButtonPathGo := TButton.Create(Result);     ButtonPathGo.Parent := GroupBox1;     ButtonPathGo.Left    := 187;     ButtonPathGo.Top     := 42;     ButtonPathGo.Width   := 75;     ButtonPathGo.Height  := 25;     ButtonPathGo.Visible := TRUE;     ButtonPathGo.Tag     := 0;     ButtonPathGo.Enabled  := TRUE;     ButtonPathGo.Hint     := '';     ButtonPathGo.ShowHint := FALSE;     ButtonPathGo.Caption    := 'Go';     ButtonPathGo.Font.Name  := 'Tahoma';     ButtonPathGo.Font.Size  := 8;     ButtonPathGo.Font.Color := clWindowText;     ButtonPathGo.Font.CharSet := 1;     ButtonPathGo.TabOrder     := 2;     ButtonPathGo.TabStop      := TRUE;     ButtonPathGo.Cancel       := FALSE;     ButtonPathGo.ModalResult  := 0;     ButtonPathGo.OnClick     := @ButtonPathGo_Click;     //......................................     //......................................     //ButtonPathSave     ButtonPathSave := TButton.Create(Result);     ButtonPathSave.Parent := GroupBox1;     ButtonPathSave.Left    := 101;     ButtonPathSave.Top     := 42;     ButtonPathSave.Width   := 75;     ButtonPathSave.Height  := 25;     ButtonPathSave.Visible := TRUE;     ButtonPathSave.Tag     := 0;     ButtonPathSave.Enabled  := TRUE;     ButtonPathSave.Hint     := '';     ButtonPathSave.ShowHint := FALSE;     ButtonPathSave.Caption    := 'Save';     ButtonPathSave.Font.Name  := 'Tahoma';     ButtonPathSave.Font.Size  := 8;     ButtonPathSave.Font.Color := clWindowText;     ButtonPathSave.Font.CharSet := 1;     ButtonPathSave.TabOrder     := 3;     ButtonPathSave.TabStop      := TRUE;     ButtonPathSave.Cancel       := FALSE;     ButtonPathSave.ModalResult  := 0;     ButtonPathSave.OnClick     := @ButtonPathSave_Click;     //......................................     //......................................     //ButtonPathRec     ButtonPathRec := TButton.Create(Result);     ButtonPathRec.Parent := GroupBox1;     ButtonPathRec.Left    := 14;     ButtonPathRec.Top     := 42;     ButtonPathRec.Width   := 75;     ButtonPathRec.Height  := 25;     ButtonPathRec.Visible := TRUE;     ButtonPathRec.Tag     := 0;     ButtonPathRec.Enabled  := TRUE;     ButtonPathRec.Hint     := '';     ButtonPathRec.ShowHint := FALSE;     ButtonPathRec.Caption    := 'Rec';     ButtonPathRec.Font.Name  := 'Tahoma';     ButtonPathRec.Font.Size  := 8;     ButtonPathRec.Font.Color := clWindowText;     ButtonPathRec.Font.CharSet := 1;     ButtonPathRec.TabOrder     := 4;     ButtonPathRec.TabStop      := TRUE;     ButtonPathRec.Cancel       := FALSE;     ButtonPathRec.ModalResult  := 0;     ButtonPathRec.OnClick     := @ButtonPathRec_Click;     //......................................     //......................................     //EditPath     EditPath := TEdit.Create(Result);     EditPath.Parent := GroupBox1;     EditPath.Left    := 67;     EditPath.Top     := 15;     EditPath.Width   := 109;     EditPath.Height  := 21;     EditPath.Visible := TRUE;     EditPath.Tag     := 0;     EditPath.Enabled  := TRUE;     EditPath.Hint     := 'Введи имя файла для сохранения пути';     EditPath.ShowHint := TRUE;     EditPath.Text       := 'Mestolovli1';     EditPath.Font.Name  := 'Tahoma';     EditPath.Font.Size  := 8;     EditPath.Font.Color := clWindowText;     EditPath.Color        := clWindow;     EditPath.TabOrder     := 5;     EditPath.TabStop      := TRUE;     EditPath.ReadOnly     := FALSE;     EditPath.MaxLength    := 0;     EditPath.AutoSize     := TRUE; //    EditPath.OnChange     := @EditPath_Change;     //......................................     //......................................     //ComboBoxPath     ComboBoxPath := TComboBox.Create(Result);     ComboBoxPath.Parent := GroupBox1;     ComboBoxPath.Left    := 187;     ComboBoxPath.Top     := 15;     ComboBoxPath.Width   := 231;     ComboBoxPath.Height  := 21;     ComboBoxPath.Visible := TRUE;     ComboBoxPath.Tag     := 0;     ComboBoxPath.Enabled  := TRUE;     ComboBoxPath.Hint     := 'Выбери из списка путь для движения';     ComboBoxPath.ShowHint := TRUE;     ComboBoxPath.Text       := 'Mestolovli1';     ComboBoxPath.Font.Name  := 'Tahoma';     ComboBoxPath.Font.Size  := 8;     ComboBoxPath.Font.Color := clWindowText;     ComboBoxPath.Color          := clWindow;     ComboBoxPath.TabOrder       := 6;     ComboBoxPath.TabStop        := TRUE;     ComboBoxPath.Sorted         := FALSE;     ComboBoxPath.ItemHeight     := 13;     ComboBoxPath.OnChange     := @ComboBoxPath_Change;     ComboBoxPath.Items.ADD('Mestolovli1');     ComboBoxPath.Items.ADD('Mestolovli2');     ComboBoxPath.Items.ADD('Mestolovli3');     ComboBoxPath.Items.ADD('MenayemMesto1');     ComboBoxPath.Items.ADD('MenayemMesto2');     ComboBoxPath.Items.ADD('MenayemMesto3');     ComboBoxPath.Items.ADD('Reposition1');     ComboBoxPath.Items.ADD('Reposition2');     ComboBoxPath.Items.ADD('Reposition3');     ComboBoxPath.Items.ADD('AfterDeath');     ComboBoxPath.ItemIndex          := 0;     //......................................     //......................................     //GroupBox2     GroupBox2 := TGroupBox.Create(Result);     GroupBox2.Parent := Panel1;     GroupBox2.Left    := 1;     GroupBox2.Top     := -2;     GroupBox2.Width   := 421;     GroupBox2.Height  := 195;     GroupBox2.Visible := TRUE;     GroupBox2.Tag     := 0;     GroupBox2.Enabled  := TRUE;     GroupBox2.Hint     := '';     GroupBox2.ShowHint := FALSE;     GroupBox2.Caption    := 'Рыбалка';     GroupBox2.Align      := alNone;     GroupBox2.Color      := clBtnFace;     GroupBox2.Font.Name  := 'Tahoma';     GroupBox2.Font.Size  := 8;     GroupBox2.Font.Color := clWindowText;     GroupBox2.Font.CharSet := 1;     GroupBox2.TabOrder     := 1;     GroupBox2.TabStop      := FALSE;     //......................................     //......................................     //Label2     Label2 := TLabel.Create(Result);     Label2.Parent := GroupBox2;     Label2.Left    := 400;     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    := 400;     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;     //......................................     //......................................     //Label5     Label5 := TLabel.Create(Result);     Label5.Parent := GroupBox2;     Label5.Left    := 400;     Label5.Top     := 67;     Label5.Width   := 18;     Label5.Height  := 13;     Label5.Visible := TRUE;     Label5.Tag     := 0;     Label5.Enabled  := TRUE;     Label5.Hint     := '';     Label5.ShowHint := FALSE;     Label5.Caption     := 'шт.';     Label5.Transparent := TRUE;     Label5.WordWrap    := FALSE;     Label5.Alignment   := taLeftJustify;     Label5.Layout      := tlTop;     Label5.AutoSize    := TRUE;     Label5.Align       := alNone;     Label5.Font.Name   := 'Tahoma';     Label5.Font.Size   := 8;     Label5.Font.Color  := clWindowText;     Label5.Color       := clBtnFace;     //......................................     //......................................     //Label6     Label6 := TLabel.Create(Result);     Label6.Parent := GroupBox2;     Label6.Left    := 400;     Label6.Top     := 91;     Label6.Width   := 18;     Label6.Height  := 13;     Label6.Visible := TRUE;     Label6.Tag     := 0;     Label6.Enabled  := TRUE;     Label6.Hint     := '';     Label6.ShowHint := FALSE;     Label6.Caption     := 'шт.';     Label6.Transparent := TRUE;     Label6.WordWrap    := FALSE;     Label6.Alignment   := taLeftJustify;     Label6.Layout      := tlTop;     Label6.AutoSize    := TRUE;     Label6.Align       := alNone;     Label6.Font.Name   := 'Tahoma';     Label6.Font.Size   := 8;     Label6.Font.Color  := clWindowText;     Label6.Color       := clBtnFace;     //......................................     //......................................     //Label7     Label7 := TLabel.Create(Result);     Label7.Parent := GroupBox2;     Label7.Left    := 400;     Label7.Top     := 116;     Label7.Width   := 18;     Label7.Height  := 13;     Label7.Visible := TRUE;     Label7.Tag     := 0;     Label7.Enabled  := TRUE;     Label7.Hint     := '';     Label7.ShowHint := FALSE;     Label7.Caption     := 'шт.';     Label7.Transparent := TRUE;     Label7.WordWrap    := FALSE;     Label7.Alignment   := taLeftJustify;     Label7.Layout      := tlTop;     Label7.AutoSize    := TRUE;     Label7.Align       := alNone;     Label7.Font.Name   := 'Tahoma';     Label7.Font.Size   := 8;     Label7.Font.Color  := clWindowText;     Label7.Color       := clBtnFace;     //......................................     //......................................     //Label12     Label12 := TLabel.Create(Result);     Label12.Parent := GroupBox2;     Label12.Left    := 257;     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    := 333;     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;     //......................................     //......................................     //CheckBoxRod     CheckBoxRod := TCheckBox.Create(Result);     CheckBoxRod.Parent := GroupBox2;     CheckBoxRod.Left    := 18;     CheckBoxRod.Top     := 18;     CheckBoxRod.Width   := 55;     CheckBoxRod.Height  := 17;     CheckBoxRod.Visible := TRUE;     CheckBoxRod.Tag     := 0;     CheckBoxRod.Enabled  := TRUE;     CheckBoxRod.Hint     := 'Поставить галочку если выбрали удочку';     CheckBoxRod.ShowHint := TRUE;     CheckBoxRod.Caption    := 'Rod';     CheckBoxRod.Font.Name  := 'Tahoma';     CheckBoxRod.Font.Size  := 8;     CheckBoxRod.Font.Color := clWindowText;     CheckBoxRod.Color       := clBtnFace;     CheckBoxRod.TabOrder    := 0;     CheckBoxRod.TabStop     := TRUE;     CheckBoxRod.Checked     := FALSE;     CheckBoxRod.AllowGrayed := FALSE;     CheckBoxRod.State       := cbUnchecked;     CheckBoxRod.OnClick     := @CheckBoxRod_Click;     //......................................     //......................................     //ComboBoxRod     ComboBoxRod := TComboBox.Create(Result);     ComboBoxRod.Parent := GroupBox2;     ComboBoxRod.Left    := 74;     ComboBoxRod.Top     := 16;     ComboBoxRod.Width   := 169;     ComboBoxRod.Height  := 21;     ComboBoxRod.Visible := TRUE;     ComboBoxRod.Tag     := 0;     ComboBoxRod.Enabled  := TRUE;     ComboBoxRod.Hint     := 'Выбери из списка удочку';     ComboBoxRod.ShowHint := TRUE;     ComboBoxRod.Text       := 'ComboBoxRod';     ComboBoxRod.Font.Name  := 'Tahoma';     ComboBoxRod.Font.Size  := 8;     ComboBoxRod.Font.Color := clWindowText;     ComboBoxRod.Color          := clWindow;     ComboBoxRod.TabOrder       := 1;     ComboBoxRod.TabStop        := TRUE;     ComboBoxRod.ItemIndex          := -1;     ComboBoxRod.Sorted         := FALSE;     ComboBoxRod.ItemHeight     := 13;     ComboBoxRod.OnChange     := @ComboBoxRod_Change;     //......................................     //......................................     //ComboBoxFShot     ComboBoxFShot := TComboBox.Create(Result);     ComboBoxFShot.Parent := GroupBox2;     ComboBoxFShot.Left    := 74;     ComboBoxFShot.Top     := 113;     ComboBoxFShot.Width   := 169;     ComboBoxFShot.Height  := 21;     ComboBoxFShot.Visible := TRUE;     ComboBoxFShot.Tag     := 0;     ComboBoxFShot.Enabled  := TRUE;     ComboBoxFShot.Hint     := 'Выбери из списка фишиншоты';     ComboBoxFShot.ShowHint := TRUE;     ComboBoxFShot.Text       := 'ComboBoxFShot';     ComboBoxFShot.Font.Name  := 'Tahoma';     ComboBoxFShot.Font.Size  := 8;     ComboBoxFShot.Font.Color := clWindowText;     ComboBoxFShot.Color          := clWindow;     ComboBoxFShot.TabOrder       := 2;     ComboBoxFShot.TabStop        := TRUE;     ComboBoxFShot.ItemIndex          := -1;     ComboBoxFShot.Sorted         := FALSE;     ComboBoxFShot.ItemHeight     := 13;     ComboBoxFShot.OnChange     := @ComboBoxFShot_Change;     //......................................     //......................................     //ButtonFishingStart     ButtonFishingStart := TButton.Create(Result);     ButtonFishingStart.Parent := GroupBox2;     ButtonFishingStart.Left    := 168;     ButtonFishingStart.Top     := 159;     ButtonFishingStart.Width   := 75;     ButtonFishingStart.Height  := 25;     ButtonFishingStart.Visible := TRUE;     ButtonFishingStart.Tag     := 0;     ButtonFishingStart.Enabled  := TRUE;     ButtonFishingStart.Hint     := 'Начать рыбалку';     ButtonFishingStart.ShowHint := TRUE;     ButtonFishingStart.Caption    := 'Start';     ButtonFishingStart.Font.Name  := 'Tahoma';     ButtonFishingStart.Font.Size  := 8;     ButtonFishingStart.Font.Color := clWindowText;     ButtonFishingStart.Font.CharSet := 1;     ButtonFishingStart.TabOrder     := 3;     ButtonFishingStart.TabStop      := TRUE;     ButtonFishingStart.Cancel       := FALSE;     ButtonFishingStart.ModalResult  := 0;     ButtonFishingStart.OnClick     := @ButtonFishingStart_Click;     //......................................     //......................................     //ButtonFishingStop     ButtonFishingStop := TButton.Create(Result);     ButtonFishingStop.Parent := GroupBox2;     ButtonFishingStop.Left    := 306;     ButtonFishingStop.Top     := 159;     ButtonFishingStop.Width   := 75;     ButtonFishingStop.Height  := 25;     ButtonFishingStop.Visible := TRUE;     ButtonFishingStop.Tag     := 0;     ButtonFishingStop.Enabled  := TRUE;     ButtonFishingStop.Hint     := 'Остановить рыбалку';     ButtonFishingStop.ShowHint := TRUE;     ButtonFishingStop.Caption    := 'Stop';     ButtonFishingStop.Font.Name  := 'Tahoma';     ButtonFishingStop.Font.Size  := 8;     ButtonFishingStop.Font.Color := clWindowText;     ButtonFishingStop.Font.CharSet := 1;     ButtonFishingStop.TabOrder     := 4;     ButtonFishingStop.TabStop      := TRUE;     ButtonFishingStop.Cancel       := FALSE;     ButtonFishingStop.ModalResult  := 0;     ButtonFishingStop.OnClick     := @ButtonFishingStop_Click;     //......................................     //......................................     //CheckBoxLure     CheckBoxLure := TCheckBox.Create(Result);     CheckBoxLure.Parent := GroupBox2;     CheckBoxLure.Left    := 18;     CheckBoxLure.Top     := 41;     CheckBoxLure.Width   := 55;     CheckBoxLure.Height  := 23;     CheckBoxLure.Visible := TRUE;     CheckBoxLure.Tag     := 0;     CheckBoxLure.Enabled  := TRUE;     CheckBoxLure.Hint     := 'Поставить галочку если выбрали крючёк';     CheckBoxLure.ShowHint := TRUE;     CheckBoxLure.Caption    := 'Lure';     CheckBoxLure.Font.Name  := 'Tahoma';     CheckBoxLure.Font.Size  := 8;     CheckBoxLure.Font.Color := clWindowText;     CheckBoxLure.Color       := clBtnFace;     CheckBoxLure.TabOrder    := 5;     CheckBoxLure.TabStop     := TRUE;     CheckBoxLure.Checked     := FALSE;     CheckBoxLure.AllowGrayed := FALSE;     CheckBoxLure.State       := cbUnchecked;     CheckBoxLure.OnClick     := @CheckBoxLure_Click;     //......................................     //......................................     //CheckBoxWeapon     CheckBoxWeapon := TCheckBox.Create(Result);     CheckBoxWeapon.Parent := GroupBox2;     CheckBoxWeapon.Left    := 18;     CheckBoxWeapon.Top     := 64;     CheckBoxWeapon.Width   := 55;     CheckBoxWeapon.Height  := 22;     CheckBoxWeapon.Visible := TRUE;     CheckBoxWeapon.Tag     := 0;     CheckBoxWeapon.Enabled  := TRUE;     CheckBoxWeapon.Hint     := 'Поставить галочку если выбрали оружие';     CheckBoxWeapon.ShowHint := TRUE;     CheckBoxWeapon.Caption    := 'Weapon';     CheckBoxWeapon.Font.Name  := 'Tahoma';     CheckBoxWeapon.Font.Size  := 8;     CheckBoxWeapon.Font.Color := clWindowText;     CheckBoxWeapon.Color       := clBtnFace;     CheckBoxWeapon.TabOrder    := 6;     CheckBoxWeapon.TabStop     := TRUE;     CheckBoxWeapon.Checked     := FALSE;     CheckBoxWeapon.AllowGrayed := FALSE;     CheckBoxWeapon.State       := cbUnchecked;     CheckBoxWeapon.OnClick     := @CheckBoxWeapon_Click;     //......................................     //......................................     //CheckBoxShield     CheckBoxShield := TCheckBox.Create(Result);     CheckBoxShield.Parent := GroupBox2;     CheckBoxShield.Left    := 18;     CheckBoxShield.Top     := 92;     CheckBoxShield.Width   := 52;     CheckBoxShield.Height  := 17;     CheckBoxShield.Visible := TRUE;     CheckBoxShield.Tag     := 0;     CheckBoxShield.Enabled  := TRUE;     CheckBoxShield.Hint     := 'Поставить галочку если выбрали щит';     CheckBoxShield.ShowHint := TRUE;     CheckBoxShield.Caption    := 'Shield';     CheckBoxShield.Font.Name  := 'Tahoma';     CheckBoxShield.Font.Size  := 8;     CheckBoxShield.Font.Color := clWindowText;     CheckBoxShield.Color       := clBtnFace;     CheckBoxShield.TabOrder    := 7;     CheckBoxShield.TabStop     := TRUE;     CheckBoxShield.Checked     := FALSE;     CheckBoxShield.AllowGrayed := FALSE;     CheckBoxShield.State       := cbUnchecked;     CheckBoxShield.OnClick     := @CheckBoxShield_Click;     //......................................     //......................................     //CheckBoxFShot     CheckBoxFShot := TCheckBox.Create(Result);     CheckBoxFShot.Parent := GroupBox2;     CheckBoxFShot.Left    := 18;     CheckBoxFShot.Top     := 116;     CheckBoxFShot.Width   := 52;     CheckBoxFShot.Height  := 17;     CheckBoxFShot.Visible := TRUE;     CheckBoxFShot.Tag     := 0;     CheckBoxFShot.Enabled  := TRUE;     CheckBoxFShot.Hint     := 'Поставить галочку если выбрали фишиншоты';     CheckBoxFShot.ShowHint := TRUE;     CheckBoxFShot.Caption    := 'FShot';     CheckBoxFShot.Font.Name  := 'Tahoma';     CheckBoxFShot.Font.Size  := 8;     CheckBoxFShot.Font.Color := clWindowText;     CheckBoxFShot.Color       := clBtnFace;     CheckBoxFShot.TabOrder    := 8;     CheckBoxFShot.TabStop     := TRUE;     CheckBoxFShot.Checked     := FALSE;     CheckBoxFShot.AllowGrayed := FALSE;     CheckBoxFShot.State       := cbUnchecked;     CheckBoxFShot.OnClick     := @CheckBoxFShot_Click;     //......................................     //......................................     //ComboBoxLure     ComboBoxLure := TComboBox.Create(Result);     ComboBoxLure.Parent := GroupBox2;     ComboBoxLure.Left    := 74;     ComboBoxLure.Top     := 40;     ComboBoxLure.Width   := 169;     ComboBoxLure.Height  := 21;     ComboBoxLure.Visible := TRUE;     ComboBoxLure.Tag     := 0;     ComboBoxLure.Enabled  := TRUE;     ComboBoxLure.Hint     := 'Выбери из списка крючёк';     ComboBoxLure.ShowHint := TRUE;     ComboBoxLure.Text       := 'ComboBoxLure';     ComboBoxLure.Font.Name  := 'Tahoma';     ComboBoxLure.Font.Size  := 8;     ComboBoxLure.Font.Color := clWindowText;     ComboBoxLure.Color          := clWindow;     ComboBoxLure.TabOrder       := 9;     ComboBoxLure.TabStop        := TRUE;     ComboBoxLure.ItemIndex          := -1;     ComboBoxLure.Sorted         := FALSE;     ComboBoxLure.ItemHeight     := 13;     ComboBoxLure.OnChange     := @ComboBoxLure_Change;     //......................................     //......................................     //ComboBoxWeapon     ComboBoxWeapon := TComboBox.Create(Result);     ComboBoxWeapon.Parent := GroupBox2;     ComboBoxWeapon.Left    := 74;     ComboBoxWeapon.Top     := 64;     ComboBoxWeapon.Width   := 169;     ComboBoxWeapon.Height  := 21;     ComboBoxWeapon.Visible := TRUE;     ComboBoxWeapon.Tag     := 0;     ComboBoxWeapon.Enabled  := TRUE;     ComboBoxWeapon.Hint     := 'Выбери из списка оружие';     ComboBoxWeapon.ShowHint := TRUE;     ComboBoxWeapon.Text       := 'ComboBoxWeapon';     ComboBoxWeapon.Font.Name  := 'Tahoma';     ComboBoxWeapon.Font.Size  := 8;     ComboBoxWeapon.Font.Color := clWindowText;     ComboBoxWeapon.Color          := clWindow;     ComboBoxWeapon.TabOrder       := 10;     ComboBoxWeapon.TabStop        := TRUE;     ComboBoxWeapon.ItemIndex          := -1;     ComboBoxWeapon.Sorted         := FALSE;     ComboBoxWeapon.ItemHeight     := 13;     ComboBoxWeapon.OnChange     := @ComboBoxWeapon_Change;     //......................................     //......................................     //ComboBoxShield     ComboBoxShield := TComboBox.Create(Result);     ComboBoxShield.Parent := GroupBox2;     ComboBoxShield.Left    := 74;     ComboBoxShield.Top     := 88;     ComboBoxShield.Width   := 169;     ComboBoxShield.Height  := 21;     ComboBoxShield.Visible := TRUE;     ComboBoxShield.Tag     := 0;     ComboBoxShield.Enabled  := TRUE;     ComboBoxShield.Hint     := 'Выбери из списка щит';     ComboBoxShield.ShowHint := TRUE;     ComboBoxShield.Text       := 'ComboBoxShield';     ComboBoxShield.Font.Name  := 'Tahoma';     ComboBoxShield.Font.Size  := 8;     ComboBoxShield.Font.Color := clWindowText;     ComboBoxShield.Color          := clWindow;     ComboBoxShield.TabOrder       := 11;     ComboBoxShield.TabStop        := TRUE;     ComboBoxShield.ItemIndex          := -1;     ComboBoxShield.Sorted         := FALSE;     ComboBoxShield.ItemHeight     := 13;     ComboBoxShield.OnChange     := @ComboBoxShield_Change;     //......................................     //......................................     //CheckBoxFO     CheckBoxFO := TCheckBox.Create(Result);     CheckBoxFO.Parent := GroupBox2;     CheckBoxFO.Left    := 18;     CheckBoxFO.Top     := 140;     CheckBoxFO.Width   := 105;     CheckBoxFO.Height  := 17;     CheckBoxFO.Visible := TRUE;     CheckBoxFO.Tag     := 0;     CheckBoxFO.Enabled  := TRUE;     CheckBoxFO.Hint     := 'Поставить галочку если хотим преобразовывать масло';     CheckBoxFO.ShowHint := TRUE;     CheckBoxFO.Caption    := 'FO->GFO->PFO';     CheckBoxFO.Font.Name  := 'Tahoma';     CheckBoxFO.Font.Size  := 8;     CheckBoxFO.Font.Color := clWindowText;     CheckBoxFO.Color       := clBtnFace;     CheckBoxFO.TabOrder    := 12;     CheckBoxFO.TabStop     := TRUE;     CheckBoxFO.Checked     := FALSE;     CheckBoxFO.AllowGrayed := FALSE;     CheckBoxFO.State       := cbUnchecked;     CheckBoxFO.OnClick     := @CheckBoxFO_Click;     //......................................     //......................................     //CheckBoxPU     CheckBoxPU := TCheckBox.Create(Result);     CheckBoxPU.Parent := GroupBox2;     CheckBoxPU.Left    := 18;     CheckBoxPU.Top     := 163;     CheckBoxPU.Width   := 105;     CheckBoxPU.Height  := 17;     CheckBoxPU.Visible := TRUE;     CheckBoxPU.Tag     := 0;     CheckBoxPU.Enabled  := TRUE;     CheckBoxPU.Hint     := 'Поставить галочку если хотим потрошить улов';     CheckBoxPU.ShowHint := TRUE;     CheckBoxPU.Caption    := 'Потрошить улов';     CheckBoxPU.Font.Name  := 'Tahoma';     CheckBoxPU.Font.Size  := 8;     CheckBoxPU.Font.Color := clWindowText;     CheckBoxPU.Color       := clBtnFace;     CheckBoxPU.TabOrder    := 13;     CheckBoxPU.TabStop     := TRUE;     CheckBoxPU.Checked     := FALSE;     CheckBoxPU.AllowGrayed := FALSE;     CheckBoxPU.State       := cbUnchecked;     CheckBoxPU.OnClick     := @CheckBoxPU_Click;     //......................................     //......................................     //EditRodVal     EditRodVal := TEdit.Create(Result);     EditRodVal.Parent := GroupBox2;     EditRodVal.Left    := 325;     EditRodVal.Top     := 16;     EditRodVal.Width   := 72;     EditRodVal.Height  := 21;     EditRodVal.Visible := TRUE;     EditRodVal.Tag     := 0;     EditRodVal.Enabled  := TRUE;     EditRodVal.Hint     := '';     EditRodVal.ShowHint := FALSE;     EditRodVal.Text       := '0';     EditRodVal.Font.Name  := 'Tahoma';     EditRodVal.Font.Size  := 8;     EditRodVal.Font.Color := clWindowText;     EditRodVal.Color        := clWindow;     EditRodVal.TabOrder     := 14;     EditRodVal.TabStop      := TRUE;     EditRodVal.ReadOnly     := TRUE;     EditRodVal.MaxLength    := 0;     EditRodVal.AutoSize     := TRUE;     //......................................     //......................................     //EditLureVal     EditLureVal := TEdit.Create(Result);     EditLureVal.Parent := GroupBox2;     EditLureVal.Left    := 325;     EditLureVal.Top     := 40;     EditLureVal.Width   := 72;     EditLureVal.Height  := 21;     EditLureVal.Visible := TRUE;     EditLureVal.Tag     := 0;     EditLureVal.Enabled  := TRUE;     EditLureVal.Hint     := '';     EditLureVal.ShowHint := FALSE;     EditLureVal.Text       := '0';     EditLureVal.Font.Name  := 'Tahoma';     EditLureVal.Font.Size  := 8;     EditLureVal.Font.Color := clWindowText;     EditLureVal.Color        := clWindow;     EditLureVal.TabOrder     := 15;     EditLureVal.TabStop      := TRUE;     EditLureVal.ReadOnly     := TRUE;     EditLureVal.MaxLength    := 0;     EditLureVal.AutoSize     := TRUE;     //......................................     //......................................     //EditWeaponVal     EditWeaponVal := TEdit.Create(Result);     EditWeaponVal.Parent := GroupBox2;     EditWeaponVal.Left    := 325;     EditWeaponVal.Top     := 64;     EditWeaponVal.Width   := 72;     EditWeaponVal.Height  := 21;     EditWeaponVal.Visible := TRUE;     EditWeaponVal.Tag     := 0;     EditWeaponVal.Enabled  := TRUE;     EditWeaponVal.Hint     := '';     EditWeaponVal.ShowHint := FALSE;     EditWeaponVal.Text       := '0';     EditWeaponVal.Font.Name  := 'Tahoma';     EditWeaponVal.Font.Size  := 8;     EditWeaponVal.Font.Color := clWindowText;     EditWeaponVal.Color        := clWindow;     EditWeaponVal.TabOrder     := 16;     EditWeaponVal.TabStop      := TRUE;     EditWeaponVal.ReadOnly     := TRUE;     EditWeaponVal.MaxLength    := 0;     EditWeaponVal.AutoSize     := TRUE;     //......................................     //......................................     //Edit6     EditShieldVal := TEdit.Create(Result);     EditShieldVal.Parent := GroupBox2;     EditShieldVal.Left    := 325;     EditShieldVal.Top     := 88;     EditShieldVal.Width   := 72;     EditShieldVal.Height  := 21;     EditShieldVal.Visible := TRUE;     EditShieldVal.Tag     := 0;     EditShieldVal.Enabled  := TRUE;     EditShieldVal.Hint     := '';     EditShieldVal.ShowHint := FALSE;     EditShieldVal.Text       := '0';     EditShieldVal.Font.Name  := 'Tahoma';     EditShieldVal.Font.Size  := 8;     EditShieldVal.Font.Color := clWindowText;     EditShieldVal.Color        := clWindow;     EditShieldVal.TabOrder     := 17;     EditShieldVal.TabStop      := TRUE;     EditShieldVal.ReadOnly     := TRUE;     EditShieldVal.MaxLength    := 0;     EditShieldVal.AutoSize     := TRUE;     //......................................     //......................................     //Edit7     EditFShotVal := TEdit.Create(Result);     EditFShotVal.Parent := GroupBox2;     EditFShotVal.Left    := 325;     EditFShotVal.Top     := 113;     EditFShotVal.Width   := 72;     EditFShotVal.Height  := 21;     EditFShotVal.Visible := TRUE;     EditFShotVal.Tag     := 0;     EditFShotVal.Enabled  := TRUE;     EditFShotVal.Hint     := '';     EditFShotVal.ShowHint := FALSE;     EditFShotVal.Text       := '0';     EditFShotVal.Font.Name  := 'Tahoma';     EditFShotVal.Font.Size  := 8;     EditFShotVal.Font.Color := clWindowText;     EditFShotVal.Color        := clWindow;     EditFShotVal.TabOrder     := 18;     EditFShotVal.TabStop      := TRUE;     EditFShotVal.ReadOnly     := TRUE;     EditFShotVal.MaxLength    := 0;     EditFShotVal.AutoSize     := TRUE;     //......................................     //......................................     //EditLureOID     EditLureOID := TEdit.Create(Result);     EditLureOID.Parent := GroupBox2;     EditLureOID.Left    := 248;     EditLureOID.Top     := 40;     EditLureOID.Width   := 72;     EditLureOID.Height  := 21;     EditLureOID.Visible := TRUE;     EditLureOID.Tag     := 0;     EditLureOID.Enabled  := TRUE;     EditLureOID.Hint     := '';     EditLureOID.ShowHint := FALSE;     EditLureOID.Text       := '0';     EditLureOID.Font.Name  := 'Tahoma';     EditLureOID.Font.Size  := 8;     EditLureOID.Font.Color := clWindowText;     EditLureOID.Color        := clWindow;     EditLureOID.TabOrder     := 19;     EditLureOID.TabStop      := TRUE;     EditLureOID.ReadOnly     := TRUE;     EditLureOID.MaxLength    := 0;     EditLureOID.AutoSize     := TRUE;     //......................................     //......................................     //EditWeaponOID     EditWeaponOID := TEdit.Create(Result);     EditWeaponOID.Parent := GroupBox2;     EditWeaponOID.Left    := 248;     EditWeaponOID.Top     := 64;     EditWeaponOID.Width   := 72;     EditWeaponOID.Height  := 21;     EditWeaponOID.Visible := TRUE;     EditWeaponOID.Tag     := 0;     EditWeaponOID.Enabled  := TRUE;     EditWeaponOID.Hint     := '';     EditWeaponOID.ShowHint := FALSE;     EditWeaponOID.Text       := '0';     EditWeaponOID.Font.Name  := 'Tahoma';     EditWeaponOID.Font.Size  := 8;     EditWeaponOID.Font.Color := clWindowText;     EditWeaponOID.Color        := clWindow;     EditWeaponOID.TabOrder     := 20;     EditWeaponOID.TabStop      := TRUE;     EditWeaponOID.ReadOnly     := TRUE;     EditWeaponOID.MaxLength    := 0;     EditWeaponOID.AutoSize     := TRUE;     //......................................     //......................................     //EditShieldOID     EditShieldOID := TEdit.Create(Result);     EditShieldOID.Parent := GroupBox2;     EditShieldOID.Left    := 248;     EditShieldOID.Top     := 88;     EditShieldOID.Width   := 72;     EditShieldOID.Height  := 21;     EditShieldOID.Visible := TRUE;     EditShieldOID.Tag     := 0;     EditShieldOID.Enabled  := TRUE;     EditShieldOID.Hint     := '';     EditShieldOID.ShowHint := FALSE;     EditShieldOID.Text       := '0';     EditShieldOID.Font.Name  := 'Tahoma';     EditShieldOID.Font.Size  := 8;     EditShieldOID.Font.Color := clWindowText;     EditShieldOID.Color        := clWindow;     EditShieldOID.TabOrder     := 21;     EditShieldOID.TabStop      := TRUE;     EditShieldOID.ReadOnly     := TRUE;     EditShieldOID.MaxLength    := 0;     EditShieldOID.AutoSize     := TRUE;     //......................................     //......................................     //EditFShotOID     EditFShotOID := TEdit.Create(Result);     EditFShotOID.Parent := GroupBox2;     EditFShotOID.Left    := 248;     EditFShotOID.Top     := 113;     EditFShotOID.Width   := 72;     EditFShotOID.Height  := 21;     EditFShotOID.Visible := TRUE;     EditFShotOID.Tag     := 0;     EditFShotOID.Enabled  := TRUE;     EditFShotOID.Hint     := '';     EditFShotOID.ShowHint := FALSE;     EditFShotOID.Text       := '0';     EditFShotOID.Font.Name  := 'Tahoma';     EditFShotOID.Font.Size  := 8;     EditFShotOID.Font.Color := clWindowText;     EditFShotOID.Color        := clWindow;     EditFShotOID.TabOrder     := 22;     EditFShotOID.TabStop      := TRUE;     EditFShotOID.ReadOnly     := TRUE;     EditFShotOID.MaxLength    := 0;     EditFShotOID.AutoSize     := TRUE;     //......................................     //......................................     //EditRodOID     EditRodOID := TEdit.Create(Result);     EditRodOID.Parent := GroupBox2;     EditRodOID.Left    := 248;     EditRodOID.Top     := 16;     EditRodOID.Width   := 72;     EditRodOID.Height  := 21;     EditRodOID.Visible := TRUE;     EditRodOID.Tag     := 0;     EditRodOID.Enabled  := TRUE;     EditRodOID.Hint     := '';     EditRodOID.ShowHint := FALSE;     EditRodOID.Text       := '0';     EditRodOID.Font.Name  := 'Tahoma';     EditRodOID.Font.Size  := 8;     EditRodOID.Font.Color := clWindowText;     EditRodOID.Color        := clWindow;     EditRodOID.TabOrder     := 23;     EditRodOID.TabStop      := TRUE;     EditRodOID.ReadOnly     := TRUE;     EditRodOID.MaxLength    := 0;     EditRodOID.AutoSize     := TRUE;     //......................................     //......................................     //GroupBox3     GroupBox3 := TGroupBox.Create(Result);     GroupBox3.Parent := Panel1;     GroupBox3.Left    := 1;     GroupBox3.Top     := 270;     GroupBox3.Width   := 421;     GroupBox3.Height  := 75;     GroupBox3.Visible := TRUE;     GroupBox3.Tag     := 0;     GroupBox3.Enabled  := TRUE;     GroupBox3.Hint     := '';     GroupBox3.ShowHint := FALSE;     GroupBox3.Caption    := 'Продать/купить';     GroupBox3.Align      := alNone;     GroupBox3.Color      := clBtnFace;     GroupBox3.Font.Name  := 'Tahoma';     GroupBox3.Font.Size  := 8;     GroupBox3.Font.Color := clWindowText;     GroupBox3.Font.CharSet := 1;     GroupBox3.TabOrder     := 2;     GroupBox3.TabStop      := FALSE;     //......................................     //......................................     //Label8     Label8 := TLabel.Create(Result);     Label8.Parent := GroupBox3;     Label8.Left    := 18;     Label8.Top     := 44;     Label8.Width   := 77;     Label8.Height  := 13;     Label8.Visible := TRUE;     Label8.Tag     := 0;     Label8.Enabled  := TRUE;     Label8.Hint     := '';     Label8.ShowHint := FALSE;     Label8.Caption     := 'Покупать Lure:';     Label8.Transparent := TRUE;     Label8.WordWrap    := FALSE;     Label8.Alignment   := taLeftJustify;     Label8.Layout      := tlTop;     Label8.AutoSize    := TRUE;     Label8.Align       := alNone;     Label8.Font.Name   := 'Tahoma';     Label8.Font.Size   := 8;     Label8.Font.Color  := clWindowText;     Label8.Color       := clBtnFace;     //......................................     //......................................     //Label9     Label9 := TLabel.Create(Result);     Label9.Parent := GroupBox3;     Label9.Left    := 175;     Label9.Top     := 44;     Label9.Width   := 18;     Label9.Height  := 13;     Label9.Visible := TRUE;     Label9.Tag     := 0;     Label9.Enabled  := TRUE;     Label9.Hint     := '';     Label9.ShowHint := FALSE;     Label9.Caption     := 'шт.';     Label9.Transparent := TRUE;     Label9.WordWrap    := FALSE;     Label9.Alignment   := taLeftJustify;     Label9.Layout      := tlTop;     Label9.AutoSize    := TRUE;     Label9.Align       := alNone;     Label9.Font.Name   := 'Tahoma';     Label9.Font.Size   := 8;     Label9.Font.Color  := clWindowText;     Label9.Color       := clBtnFace;     //......................................     //......................................     //Label17     Label17 := TLabel.Create(Result);     Label17.Parent := GroupBox3;     Label17.Left    := 257;     Label17.Top     := 3;     Label17.Width   := 29;     Label17.Height  := 13;     Label17.Visible := TRUE;     Label17.Tag     := 0;     Label17.Enabled  := TRUE;     Label17.Hint     := '';     Label17.ShowHint := FALSE;     Label17.Caption     := 'NpcOID';     Label17.Transparent := TRUE;     Label17.WordWrap    := FALSE;     Label17.Alignment   := taLeftJustify;     Label17.Layout      := tlTop;     Label17.AutoSize    := TRUE;     Label17.Align       := alNone;     Label17.Font.Name   := 'Tahoma';     Label17.Font.Size   := 8;     Label17.Font.Color  := clWindowText;     Label17.Color       := clBtnFace;     //......................................     //......................................     //CheckBoxFisherman     CheckBoxFisherman := TCheckBox.Create(Result);     CheckBoxFisherman.Parent := GroupBox3;     CheckBoxFisherman.Left    := 18;     CheckBoxFisherman.Top     := 18;     CheckBoxFisherman.Width   := 66;     CheckBoxFisherman.Height  := 17;     CheckBoxFisherman.Visible := TRUE;     CheckBoxFisherman.Tag     := 0;     CheckBoxFisherman.Enabled  := TRUE;     CheckBoxFisherman.Hint     := 'Поставить галочку если выбрали продавца';     CheckBoxFisherman.ShowHint := TRUE;     CheckBoxFisherman.Caption    := 'Fisherman';     CheckBoxFisherman.Font.Name  := 'Tahoma';     CheckBoxFisherman.Font.Size  := 8;     CheckBoxFisherman.Font.Color := clWindowText;     CheckBoxFisherman.Color       := clBtnFace;     CheckBoxFisherman.TabOrder    := 0;     CheckBoxFisherman.TabStop     := TRUE;     CheckBoxFisherman.Checked     := FALSE;     CheckBoxFisherman.AllowGrayed := FALSE;     CheckBoxFisherman.State       := cbUnchecked;     CheckBoxFisherman.OnClick     := @CheckBoxFisherman_Click;     //......................................     //......................................     //ComboBoxFisherman     ComboBoxFisherman := TComboBox.Create(Result);     ComboBoxFisherman.Parent := GroupBox3;     ComboBoxFisherman.Left    := 90;     ComboBoxFisherman.Top     := 16;     ComboBoxFisherman.Width   := 144;     ComboBoxFisherman.Height  := 21;     ComboBoxFisherman.Visible := TRUE;     ComboBoxFisherman.Tag     := 0;     ComboBoxFisherman.Enabled  := TRUE;     ComboBoxFisherman.Hint     := 'Выбери из списка продавца';     ComboBoxFisherman.ShowHint := TRUE;     ComboBoxFisherman.Text       := 'ComboBoxFisherman';     ComboBoxFisherman.Font.Name  := 'Tahoma';     ComboBoxFisherman.Font.Size  := 8;     ComboBoxFisherman.Font.Color := clWindowText;     ComboBoxFisherman.Color          := clWindow;     ComboBoxFisherman.TabOrder       := 1;     ComboBoxFisherman.TabStop        := TRUE;     ComboBoxFisherman.ItemIndex          := -1;     ComboBoxFisherman.Sorted         := FALSE;     ComboBoxFisherman.ItemHeight     := 13;     ComboBoxFisherman.OnChange     := @ComboBoxFisherman_Change;     //......................................     //......................................     //EditFishermanOID     EditFishermanOID := TEdit.Create(Result);     EditFishermanOID.Parent := GroupBox3;     EditFishermanOID.Left    := 240;     EditFishermanOID.Top     := 16;     EditFishermanOID.Width   := 72;     EditFishermanOID.Height  := 21;     EditFishermanOID.Visible := TRUE;     EditFishermanOID.Tag     := 0;     EditFishermanOID.Enabled  := TRUE;     EditFishermanOID.Hint     := '';     EditFishermanOID.ShowHint := FALSE;     EditFishermanOID.Text       := '0';     EditFishermanOID.Font.Name  := 'Tahoma';     EditFishermanOID.Font.Size  := 8;     EditFishermanOID.Font.Color := clWindowText;     EditFishermanOID.Color        := clWindow;     EditFishermanOID.TabOrder     := 2;     EditFishermanOID.TabStop      := TRUE;     EditFishermanOID.ReadOnly     := TRUE;     EditFishermanOID.MaxLength    := 0;     EditFishermanOID.AutoSize     := TRUE; //    EditFishermanOID.OnClick     := @EditFishermanOID_Click;     //......................................     //......................................     //EditLure     EditLure := TEdit.Create(Result);     EditLure.Parent := GroupBox3;     EditLure.Left    := 97;     EditLure.Top     := 41;     EditLure.Width   := 72;     EditLure.Height  := 21;     EditLure.Visible := TRUE;     EditLure.Tag     := 0;     EditLure.Enabled  := TRUE;     EditLure.Hint     := 'Введи количество крючков для закупки';     EditLure.ShowHint := TRUE;     EditLure.Text       := '300';     EditLure.Font.Name  := 'Tahoma';     EditLure.Font.Size  := 8;     EditLure.Font.Color := clWindowText;     EditLure.Color        := clWindow;     EditLure.TabOrder     := 3;     EditLure.TabStop      := TRUE;     EditLure.ReadOnly     := FALSE;     EditLure.MaxLength    := 0;     EditLure.AutoSize     := TRUE; //    EditLure.OnClick     := @EditLure_Click;     EditLure.OnEnter     := @EditLure_Change;     //......................................     //......................................     //GroupBox4     GroupBox4 := TGroupBox.Create(Result);     GroupBox4.Parent := Panel1;     GroupBox4.Left    := 1;     GroupBox4.Top     := 194;     GroupBox4.Width   := 421;     GroupBox4.Height  := 78;     GroupBox4.Visible := TRUE;     GroupBox4.Tag     := 0;     GroupBox4.Enabled  := TRUE;     GroupBox4.Hint     := '';     GroupBox4.ShowHint := FALSE;     GroupBox4.Caption    := 'Лечение';     GroupBox4.Align      := alNone;     GroupBox4.Color      := clBtnFace;     GroupBox4.Font.Name  := 'Tahoma';     GroupBox4.Font.Size  := 8;     GroupBox4.Font.Color := clWindowText;     GroupBox4.Font.CharSet := 1;     GroupBox4.TabOrder     := 3;     GroupBox4.TabStop      := FALSE;     //......................................     //......................................     //Label10     Label10 := TLabel.Create(Result);     Label10.Parent := GroupBox4;     Label10.Left    := 18;     Label10.Top     := 44;     Label10.Width   := 69;     Label10.Height  := 13;     Label10.Visible := TRUE;     Label10.Tag     := 0;     Label10.Enabled  := TRUE;     Label10.Hint     := '';     Label10.ShowHint := FALSE;     Label10.Caption     := 'Лечиться при';     Label10.Transparent := TRUE;     Label10.WordWrap    := FALSE;     Label10.Alignment   := taLeftJustify;     Label10.Layout      := tlTop;     Label10.AutoSize    := TRUE;     Label10.Align       := alNone;     Label10.Font.Name   := 'Tahoma';     Label10.Font.Size   := 8;     Label10.Font.Color  := clWindowText;     Label10.Color       := clBtnFace;     //......................................     //......................................     //Label11     Label11 := TLabel.Create(Result);     Label11.Parent := GroupBox4;     Label11.Left    := 400;     Label11.Top     := 17;     Label11.Width   := 18;     Label11.Height  := 13;     Label11.Visible := TRUE;     Label11.Tag     := 0;     Label11.Enabled  := TRUE;     Label11.Hint     := '';     Label11.ShowHint := FALSE;     Label11.Caption     := 'шт.';     Label11.Transparent := TRUE;     Label11.WordWrap    := FALSE;     Label11.Alignment   := taLeftJustify;     Label11.Layout      := tlTop;     Label11.AutoSize    := TRUE;     Label11.Align       := alNone;     Label11.Font.Name   := 'Tahoma';     Label11.Font.Size   := 8;     Label11.Font.Color  := clWindowText;     Label11.Color       := clBtnFace;     //......................................     //......................................     //Label3     Label3 := TLabel.Create(Result);     Label3.Parent := GroupBox4;     Label3.Left    := 171;     Label3.Top     := 44;     Label3.Width   := 11;     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;     //......................................     //......................................     //Label14     Label14 := TLabel.Create(Result);     Label14.Parent := GroupBox4;     Label14.Left    := 333;     Label14.Top     := 3;     Label14.Width   := 35;     Label14.Height  := 13;     Label14.Visible := TRUE;     Label14.Tag     := 0;     Label14.Enabled  := TRUE;     Label14.Hint     := '';     Label14.ShowHint := FALSE;     Label14.Caption     := 'Кол-во';     Label14.Transparent := TRUE;     Label14.WordWrap    := FALSE;     Label14.Alignment   := taLeftJustify;     Label14.Layout      := tlTop;     Label14.AutoSize    := TRUE;     Label14.Align       := alNone;     Label14.Font.Name   := 'Tahoma';     Label14.Font.Size   := 8;     Label14.Font.Color  := clWindowText;     Label14.Color       := clBtnFace;     //......................................     //......................................     //Label15     Label15 := TLabel.Create(Result);     Label15.Parent := GroupBox4;     Label15.Left    := 257;     Label15.Top     := 3;     Label15.Width   := 33;     Label15.Height  := 13;     Label15.Visible := TRUE;     Label15.Tag     := 0;     Label15.Enabled  := TRUE;     Label15.Hint     := '';     Label15.ShowHint := FALSE;     Label15.Caption     := 'ItemID';     Label15.Transparent := TRUE;     Label15.WordWrap    := FALSE;     Label15.Alignment   := taLeftJustify;     Label15.Layout      := tlTop;     Label15.AutoSize    := TRUE;     Label15.Align       := alNone;     Label15.Font.Name   := 'Tahoma';     Label15.Font.Size   := 8;     Label15.Font.Color  := clWindowText;     Label15.Color       := clBtnFace;     //......................................     //......................................     //CheckBoxHPotion     CheckBoxHPotion := TCheckBox.Create(Result);     CheckBoxHPotion.Parent := GroupBox4;     CheckBoxHPotion.Left    := 18;     CheckBoxHPotion.Top     := 16;     CheckBoxHPotion.Width   := 52;     CheckBoxHPotion.Height  := 17;     CheckBoxHPotion.Visible := TRUE;     CheckBoxHPotion.Tag     := 0;     CheckBoxHPotion.Enabled  := TRUE;     CheckBoxHPotion.Hint     := 'Поставить галочку если выбрали бутылки лечения';     CheckBoxHPotion.ShowHint := TRUE;     CheckBoxHPotion.Caption    := 'HPotion';     CheckBoxHPotion.Font.Name  := 'Tahoma';     CheckBoxHPotion.Font.Size  := 8;     CheckBoxHPotion.Font.Color := clWindowText;     CheckBoxHPotion.Color       := clBtnFace;     CheckBoxHPotion.TabOrder    := 0;     CheckBoxHPotion.TabStop     := TRUE;     CheckBoxHPotion.Checked     := FALSE;     CheckBoxHPotion.AllowGrayed := FALSE;     CheckBoxHPotion.State       := cbUnchecked;     CheckBoxHPotion.OnClick     := @CheckBoxHPotion_Click;     //......................................     //......................................     //EditHealt     EditHealt := TEdit.Create(Result);     EditHealt.Parent := GroupBox4;     EditHealt.Left    := 93;     EditHealt.Top     := 41;     EditHealt.Width   := 72;     EditHealt.Height  := 21;     EditHealt.Visible := TRUE;     EditHealt.Tag     := 0;     EditHealt.Enabled  := TRUE;     EditHealt.Hint     := 'Введи процент при котором начинать пить бутылки';     EditHealt.ShowHint := TRUE;     EditHealt.Text       := '80';     EditHealt.Font.Name  := 'Tahoma';     EditHealt.Font.Size  := 8;     EditHealt.Font.Color := clWindowText;     EditHealt.Color        := clWindow;     EditHealt.TabOrder     := 1;     EditHealt.TabStop      := TRUE;     EditHealt.ReadOnly     := FALSE;     EditHealt.MaxLength    := 0;     EditHealt.AutoSize     := TRUE; //    EditHealt.OnClick     := @EditHealt_Click;     EditHealt.OnEnter     := @EditHealt_Change;     //......................................     //......................................     //ComboBoxHPotion     ComboBoxHPotion := TComboBox.Create(Result);     ComboBoxHPotion.Parent := GroupBox4;     ComboBoxHPotion.Left    := 74;     ComboBoxHPotion.Top     := 14;     ComboBoxHPotion.Width   := 169;     ComboBoxHPotion.Height  := 21;     ComboBoxHPotion.Visible := TRUE;     ComboBoxHPotion.Tag     := 0;     ComboBoxHPotion.Enabled  := TRUE;     ComboBoxHPotion.Hint     := 'Выбери из списка бутылку лечения';     ComboBoxHPotion.ShowHint := TRUE;     ComboBoxHPotion.Text       := 'ComboBoxHPotion';     ComboBoxHPotion.Font.Name  := 'Tahoma';     ComboBoxHPotion.Font.Size  := 8;     ComboBoxHPotion.Font.Color := clWindowText;     ComboBoxHPotion.Color          := clWindow;     ComboBoxHPotion.TabOrder       := 2;     ComboBoxHPotion.TabStop        := TRUE;     ComboBoxHPotion.ItemIndex          := -1;     ComboBoxHPotion.Sorted         := FALSE;     ComboBoxHPotion.ItemHeight     := 13;     ComboBoxHPotion.OnChange     := @ComboBoxHPotion_Change;     //......................................     //......................................     //EditHpotionOID     EditHpotionOID := TEdit.Create(Result);     EditHpotionOID.Parent := GroupBox4;     EditHpotionOID.Left    := 248;     EditHpotionOID.Top     := 14;     EditHpotionOID.Width   := 72;     EditHpotionOID.Height  := 21;     EditHpotionOID.Visible := TRUE;     EditHpotionOID.Tag     := 0;     EditHpotionOID.Enabled  := TRUE;     EditHpotionOID.Hint     := '';     EditHpotionOID.ShowHint := FALSE;     EditHpotionOID.Text       := '0';     EditHpotionOID.Font.Name  := 'Tahoma';     EditHpotionOID.Font.Size  := 8;     EditHpotionOID.Font.Color := clWindowText;     EditHpotionOID.Color        := clWindow;     EditHpotionOID.TabOrder     := 3;     EditHpotionOID.TabStop      := TRUE;     EditHpotionOID.ReadOnly     := TRUE;     EditHpotionOID.MaxLength    := 0;     EditHpotionOID.AutoSize     := TRUE;     //......................................     //......................................     //EditHPotionVal     EditHPotionVal := TEdit.Create(Result);     EditHPotionVal.Parent := GroupBox4;     EditHPotionVal.Left    := 325;     EditHPotionVal.Top     := 14;     EditHPotionVal.Width   := 72;     EditHPotionVal.Height  := 21;     EditHPotionVal.Visible := TRUE;     EditHPotionVal.Tag     := 0;     EditHPotionVal.Enabled  := TRUE;     EditHPotionVal.Hint     := '';     EditHPotionVal.ShowHint := FALSE;     EditHPotionVal.Text       := '0';     EditHPotionVal.Font.Name  := 'Tahoma';     EditHPotionVal.Font.Size  := 8;     EditHPotionVal.Font.Color := clWindowText;     EditHPotionVal.Color        := clWindow;     EditHPotionVal.TabOrder     := 4;     EditHPotionVal.TabStop      := TRUE;     EditHPotionVal.ReadOnly     := TRUE;     EditHPotionVal.MaxLength    := 0;     EditHPotionVal.AutoSize     := TRUE;     //......................................     //......................................     //Stats     Stats := TMemo.Create(Result);     Stats.Parent := Result;     Stats.Left    := 428;     Stats.Top     := 0;     Stats.Width   := 185;     Stats.Height  := 471;     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      := 1;     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     := 474;     Msg.Width   := 613;     Msg.Height  := 112;     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      := 2;     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;     //......................................     //......................................     //Splitter1     Splitter1 := TSplitter.Create(Result);     Splitter1.Parent := Result;     Splitter1.Align := alBottom;     Splitter1.Color := clBtnFace;     Splitter1.Left    := 0;     Splitter1.Top     := 471;     Splitter1.Width   := 613;     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    := 425;     Splitter2.Top     := 0;     Splitter2.Width   := 3;     Splitter2.Height  := 471;     Splitter2.Visible := TRUE;     Splitter2.Tag     := 0;     //......................................     Yes := TRUE;   FINALLY     if not Yes then begin        //Освобождаем ресурсы, если неудачно ...        if Result<>NIL then begin           Result.Free;           Result:=NIL;        end;     end;   END;   Result.Show;   msg.Lines.Add('Автоматизация ловли рыбы by NLObP!');   msg.Lines.Add('Для инициализации скрипта снять/одеть удочку, крючки!!!'); end; //............................................ //*************************************************************** //Обработчики событий для элементов управления на форме //*************************************************************** //ButtonPathBack procedure ButtonPathBack_Click(Sender: TButton); //Event : OnClick begin //идти в начало пути   RecordPathFileName:=EditPath.text;   try     MovePath.LoadFromFile(RecordFilesPath+RecordPathFileName+RecordFileExt);   except     SendMsg('файл пути не найден');     exit;   end;   cmd:='move'; GoToPath(back); end; //...................................... //...................................... //ButtonPathStop procedure ButtonPathStop_Click(Sender: TButton); //Event : OnClick begin   MoveToPathEnabled:=False; end; //...................................... //...................................... //ButtonPathGo procedure ButtonPathGo_Click(Sender: TButton); //Event : OnClick begin //идти в конец пути   RecordPathFileName:=EditPath.text;   try     MovePath.LoadFromFile(RecordFilesPath+RecordPathFileName+RecordFileExt);   except     SendMsg('файл пути не найден');     exit;   end;   cmd:='move'; GoToPath(go); end; //...................................... //...................................... //ButtonPathSave procedure ButtonPathSave_Click(Sender: TButton); //Event : OnClick begin   StopRecord; end; //...................................... //...................................... //ButtonPathRec procedure ButtonPathRec_Click(Sender: TButton); //Event : OnClick begin   RecordPathFileName:=EditPath.text;   StartRecord; end; //...................................... //...................................... //EditPath procedure EditPath_Change(Sender: TEdit); //Event : OnChange begin   RecordPathFileName:=EditPath.text; end; //...................................... //...................................... //ComboBoxPath procedure ComboBoxPath_Change(Sender: TComboBox); //Event : OnChange begin     EditPath.text:=ComboBoxPath.Items.Strings[ComboBoxPath.ItemIndex]; end; //...................................... //...................................... //ButtonFishingStart procedure ButtonFishingStart_Click(Sender: TButton); //Event : OnClick begin   if not status then begin     msg.Lines.Add('Скрипт не инициализирован...');     exit;   end;   if not isEquip(MyRodID) then giverod;   if not isEquip(MyLureID) then givelure;   fishin.enabled:=true;   stop:=false; //нажали Sart   msg.Lines.Add('Начнем рыбачить...'); end; //...................................... //...................................... //ButtonFishingStop procedure ButtonFishingStop_Click(Sender: TButton); //Event : OnClick begin //  Status:=false;   fishin.enabled:=false;   trade1.enabled:=false;   CreatePFO.enabled:=false;   MoveTimer.Enabled:=False;   MoveToPathEnabled:=False;   stop:=true;   if isEquip(MyRodID) and isFishing then MagicSkillUse(fish);   isFishing:=false; //ловим?   msg.Lines.Add('Останавливаем всё! Хватит на сегодня!'); end; //...................................... //...................................... //CheckBoxRod procedure CheckBoxRod_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxRod.Checked   then begin     ComboBoxRod.Enabled:=false; //выключаем   end else begin     MyRodID:=0;               //отмена     RodOID:=0;     ComboBoxRod.Enabled:=true//включаем     //Пакет RequestItemList     buf:=hstr('14');/////////////////////////////////////////////////////////////////////////////////////////////////////////     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxRod procedure ComboBoxRod_Change(Sender: TComboBox); //Event : OnChange begin     RodOID:=ItemBase[1,ComboBoxRod.ItemIndex+1];     myRodID:=ItemBase[2,ComboBoxRod.ItemIndex+1];     EditRodOID.Text:=Inttostr(myRodID);     EditRodVal.text:=inttostr(sumitem(myRodID)); end; //...................................... //...................................... //CheckBoxLure procedure CheckBoxLure_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxLure.Checked   then begin     ComboBoxLure.Enabled:=false//выключаем     TradeBuyItem[0]:=MyLureID; //что будем покупать?   end else begin     MyLureID:=0;               //отмена     LureOID:=0;     TradeBuyItem[0]:=MyLureID; //что будем покупать?     ComboBoxLure.Enabled:=true;   //включаем     //Пакет RequestItemList     buf:=hstr('14');//////////////////////////////////////////////////////////////////////////////////////////     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxLure procedure ComboBoxLure_Change(Sender: TComboBox); //Event : OnChange begin     LureOID:=ItemBase[1,ComboBoxLure.ItemIndex+1];     myLureID:=ItemBase[2,ComboBoxLure.ItemIndex+1];     EditLureOID.Text:=Inttostr(myLureID);     EditLureVal.text:=inttostr(sumitem(myLureID)); end; //...................................... //...................................... //CheckBoxWeapon procedure CheckBoxWeapon_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxWeapon.Checked   then begin     ComboBoxWeapon.Enabled:=false//выключаем     WeaponUse1:=true;   end else begin     WeaponUse1:=false;     MyWeaponID:=0;             //отмена     WeaponOID:=0;     ComboBoxWeapon.Enabled:=true;   //включаем     //Пакет RequestItemList     buf:=hstr('14');/////////////////////////////////////////////////////////////////////////////////////     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxWeapon procedure ComboBoxWeapon_Change(Sender: TComboBox); //Event : OnChange begin     WeaponOID:=ItemBase[1,ComboBoxWeapon.ItemIndex+1];     myWeaponID:=ItemBase[2,ComboBoxWeapon.ItemIndex+1];     EditWeaponOID.Text:=Inttostr(myWeaponID);     EditWeaponVal.text:=inttostr(sumitem(myWeaponID)); end; //...................................... //...................................... //CheckBoxShield procedure CheckBoxShield_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxShield.Checked   then begin     ComboBoxShield.Enabled:=false; //выключаем     ShieldUse1:=true;   end else begin     ShieldUse1:=false;     MyShieldID:=0;            //отмена     ShieldOID:=0;     ComboBoxShield.Enabled:=true//включаем     //Пакет RequestItemList     buf:=hstr('14');////////////////////////////////////////////////////////////////////////////     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxShield procedure ComboBoxShield_Change(Sender: TComboBox); //Event : OnChange begin     ShieldOID:=ItemBase[1,ComboBoxShield.ItemIndex+1];     myShieldID:=ItemBase[2,ComboBoxShield.ItemIndex+1];     EditShieldOID.Text:=Inttostr(myShieldID);     EditShieldVal.text:=inttostr(sumitem(myShieldID)); end; //...................................... //...................................... //CheckBoxFShot procedure CheckBoxFShot_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxFShot.Checked   then begin     ComboBoxFShot.Enabled:=false; //выключаем     ShotUse1:=true;   end else begin     ShotUse1:=false;     MyShotID:=0;              //отмена     ShotOID:=0;     ComboBoxFShot.Enabled:=true//включаем     //Пакет RequestItemList     buf:=hstr('14');//////////////////////////////////////////////////////////////////////////////////////////////////     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxFShot procedure ComboBoxFShot_Change(Sender: TComboBox); //Event : OnChange begin     ShotOID:=ItemBase[1,ComboBoxFShot.ItemIndex+1];     myShotID:=ItemBase[2,ComboBoxFShot.ItemIndex+1];     EditFShotOID.Text:=Inttostr(myShotID);     EditFShotVal.text:=inttostr(sumitem(myShotID)); end; //...................................... //...................................... //EditLure //procedure EditLure_Click(Sender: TEdit); procedure EditLure_Change(Sender: TEdit); //Event : OnChange begin   NeedBuy:=strtoint(EditLure.Text); end; //...................................... //...................................... //CheckBoxFO procedure CheckBoxFO_Click(Sender: TCheckBox); //Event : OnClick begin //FO->GFO-PFO   if CheckBoxFO.Checked   then CreatePFO.enabled:=true   else CreatePFO.enabled:=false;   if CreatePFO.enabled then begin     buf:=hstr('39 2A 05 00 00 00 00 00 00 00'); //common craft/////////////////////////////////////////////////////     SendToServerEx(Name);   end; end; //...................................... //...................................... //CheckBoxPU procedure CheckBoxPU_Click(Sender: TCheckBox); //Event : OnClick begin end; //...................................... //...................................... //CheckBoxFisherman procedure CheckBoxFisherman_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxFisherman.Checked   then begin     FishermanID:=ExtractIDValues(ComboBoxFisherman.Items.Strings[ComboBoxFisherman.ItemIndex]); //берем ID     ComboBoxFisherman.Enabled:=false; //выключаем     FishermanOID:=strtoint(EditFishermanOID.text);   end else begin     FishermanID:=0;           //отмена     FishermanOID:=0;     ComboBoxFisherman.Enabled:=true//включаем   end; end; //...................................... //...................................... //ComboBoxFisherman procedure ComboBoxFisherman_Change(Sender: TComboBox); //Event : OnChange begin   FishermanID:=ExtractIDValues(ComboBoxFisherman.Items.Strings[ComboBoxFisherman.ItemIndex]);   for i:=1 to maxnpc do begin //    msg.Lines.Add('i='+inttostr(i)+'ID='+inttostr(NpcBase[2,i])+' FishermanID='+inttostr(FishermanID));     if NpcBase[2,i]=FishermanID then begin      EditFishermanOID.text:=inttostr(NpcBase[1,i]);      break;     end; //    else EditFishermanOID.text:='000';   end; end; //...................................... //...................................... //EditFishermanOID procedure EditFishermanOID_Click(Sender: TEdit); //Event : OnClick begin end; //...................................... //...................................... //CheckBoxHPotion procedure CheckBoxHPotion_Click(Sender: TCheckBox); //Event : OnClick begin   if CheckBoxHPotion.Checked   then begin     ComboBoxHPotion.Enabled:=false; //выключаем     PercentHP:=strtoint(EditHealt.Text);     ColvoHP:=strtoint(EditHPotionVal.Text);     HPUse1:=true;   end else begin     HPUse1:=false;     MyHPID:=0;                //отмена     PercentHP:=0;     HPOID:=0;     ColvoHP:=0;     ComboBoxHPotion.Enabled:=true//включаем     //Пакет RequestItemList     buf:=hstr('14');/////////////////////////////////////////////////////////////////////////     SendToServerEx(Name);   end; end; //...................................... //...................................... //ComboBoxHPotion procedure ComboBoxHPotion_Change(Sender: TComboBox); //Event : OnChange begin     HPOID:=ItemBase[1,ComboBoxHPotion.ItemIndex+1];     myHPID:=ItemBase[2,ComboBoxHPotion.ItemIndex+1];     EditHPotionOID.Text:=Inttostr(myHPID);     EditHPotionVal.text:=inttostr(sumitem(myHPID)); end; //...................................... //...................................... //EditHealt //procedure EditHealt_Click(Sender: TEdit); procedure EditHealt_Change(Sender: TEdit); //Event : OnChange begin   PercentHP:=strtoint(EditHealt.Text); end; //...................................... //...................................... procedure CheckBox11Click(Sender: TObject); begin //потрошить улов end; //...................................... //...................................... procedure CheckBox7Click(Sender: TObject); begin // end; //...................................... //...................................... procedure CheckBox8Click(Sender: TObject); begin // end; procedure CheckBox9Click(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox1Change(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox2Change(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox3Change(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox4Change(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox5Change(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox6Change(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox7Change(Sender: TObject); begin // end; //...................................... //...................................... procedure ComboBox8Change(Sender: TObject); begin // end; //...................................... //****************************************************************************** procedure FormClose(Sender: TObject; var Action: TCloseAction); begin   //Action:=caNone; end; //...................................... //*************************************************************** procedure debugmsg(msg: string); begin   if debug then SendMsg(msg); end; //...................................... {//*************************************************************** procedure SendMsg(msg:string);  //отправка системных сообщений клиенту begin   buf:=#$4A;   WriteD(0);   WriteD(10);   WriteS('');   WriteS(msg);   SendToClientEx(Name); end; //...................................... } //*************************************************************** function GetValue(ValName: string): string; begin   result:=RecordPath.Values[ValName]; end; //...................................... //*************************************************************** procedure SetValue(ValName: string; Value: string); begin   RecordPath.Values[ValName]:=Value; end; //...................................... //*************************************************************** procedure StartRecord; begin   if SavePathEnabled then exit;   if MoveToPathEnabled then   begin     SendMsg('Во время следования по маршруту запись не возможна');     msg.Lines.Add('Во время следования по маршруту запись не возможна');     exit;   end;   RecordPath.Clear;   PointsCount:=0;   SendMsg('Начата запись маршрута');   msg.Lines.Add('Начата запись маршрута');   SavePathEnabled:=True end; //...................................... //*************************************************************** procedure StopRecord; begin   if not SavePathEnabled then exit;   //записываем   RecordPath.SaveToFile(GetRecordFileName);   SendMsg('Запись маршрута завершена');   msg.Lines.Add('Запись маршрута завершена');   SavePathEnabled:=False; end; //...................................... //*************************************************************** function GetRecordFileName: string; begin   result:=RecordFilesPath+RecordPathFileName+RecordFileExt; end; //...................................... //*************************************************************** procedure ParseMoveClient; var   i,x,y,z: integer; s: string; begin   if not SavePathEnabled then     exit;   i:=2;   x:=readd(i);   y:=readd(i);   z:=readd(i);   inc(PointsCount);   s:='|'+inttostr(x)+'|'+inttostr(y)+'|'+inttostr(z)+'|';   RecordPath.Add(s);   SendMsg('добавлен чекпоинт № '+inttostr(PointsCount));   msg.Lines.Add('добавлен чекпоинт № '+inttostr(PointsCount)); end; //...................................... //*************************************************************** function delta(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает растоянием между 2 точками var   dx,dy,summa: extended; begin   try   dx:=xpos1-xpos2;   dy:=ypos1-ypos2;   summa:=dx*dx+dy*dy;   if summa=0 then result:=0 else result:=Round(sqrt(summa));   debugmsg('delta='+inttostr(result));   except     debugmsg('error in delta');   end; end; {function delta(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращает растоянием между 2 точками begin   result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2)))); end;} //...................................... //*************************************************************** function GetMinCheckPoint(PointsList: TStringList): integer; var   i,m,min_dist: integer;   s: string;   x,y,z: integer; begin   result:=-1;   min_dist:=-1;   //проверка на наличие маршрута   if PointsList.Count=0 then   begin     exit;     MoveTimer.Enabled:=False;     MoveToPathEnabled:=False;     SendMsg('Нет данных по маршруту');     msg.Lines.Add('Нет данных по маршруту');     exit;   end;   try   for i:=0 to PointsList.count-1 do   begin     s:=PointsList[i];     y:=ExtractValue(s,2);     x:=ExtractValue(s,1);     debugMsg('GetMinCheckPoint:'+s+' x:='+inttostr(x)+' y:='+inttostr(y)+' myx:='+inttostr(myx)+' myy:='+inttostr(myy));     m:=delta(x,y,myx,myy);     if m>0 then begin       if (result=-1) then begin         min_dist:=m;         result:=i;       end else         if m<min_dist then begin           min_dist:=m;           result:=i;         end;     end;   end;   except     debugMsg('error in GetMinCheckPoint');     msg.Lines.Add('error in GetMinCheckPoint');   end;//try end; //...................................... //*************************************************************** procedure GoToPath(ToForward: boolean); var   x,y,z,i: integer;   s: string; begin   MoveToPathEnabled:=not MoveToPathEnabled;   MoveToForward:=ToForward;   if not MoveToPathEnabled then   begin     MoveTimer.Enabled:=False;     SendMsg('Следование по маршруту остановлено');     msg.Lines.Add('Следование по маршруту остановлено');     exit;   end;   //   //предположительно путь уже прописан в MovePath   //   SendMsg('Пробуем выйти на путь...');   msg.Lines.Add('Пробуем выйти на путь...');   //сперва идем к ближайшему чекпоинту   i:=GetMinCheckPoint(MovePath);   if i<0 then   begin     SendMsg('чекпоинт не найден');     msg.Lines.Add('чекпоинт не найден');     MoveToPathEnabled:=False;   end else   begin     SendMsg('найден ближайший чекпоинт #'+inttostr(i)+' бежим туды');     msg.Lines.Add('найден ближайший чекпоинт #'+inttostr(i)+' бежим туды');     MoveToPathEnabled:=True;     MoveStepIndex:=i;     if debug then SendMsg('checkpoint #'+inttostr(i));     s:=MovePath[MoveStepIndex];     x:=ExtractValue(s,1);     y:=ExtractValue(s,2);     z:=ExtractValue(s,3);     if (old_x<>x) and (old_y<>y) and (old_z<>z) then     begin       MoveTo(x,y,z);       old_x:=x;       old_y:=y;       old_z:=z;       old_time:=0;     end;   end;   MoveTimer.Enabled:=True;   chk_time:=0; end; //...................................... //****************************************************************** //Идти в точку с координатами x,y,z procedure MoveTo(TargetX,TargetY,TargetZ:integer); begin   //проверка на допустимость координат   if not PosInRange(targetx,targety,targetz,5000) then begin     MoveTimer.Enabled:=False;     MoveTimer.Enabled:=False;     SendMsg('Слишком большая Дельта! Проверить папку с файлами перемещения! Движение остановлено!');     msg.Lines.Add('Слишком большая Дельта! Проверить папку с файлами перемещения! Движение остановлено!');   end else begin     //01=MoveBackwardToLocation:d(targetX)d(targetY)d(targetZ)d(originX)d(originY)d(originZ)d(moveByMouse)     buf:=#$0F;     WriteD(targetx); //куда     WriteD(targety);     WriteD(targetz);     WriteD(MyX); //откуда     WriteD(MyY);     WriteD(MyZ);     WriteD(1); //используем 1-мышь 0-клавиатура     SendToServerEx(Name);   end; end; //...................................... //*************************************************************** //Проверка находится ли заданная точка в пределах досягаемости. function PosInRange(targetx,targety,targetz,distanciya:integer):boolean; begin      if delta(targetx, targety, MyX, MyY)<=distanciya      then result:=true else result:=false; end; //...................................... //*************************************************************** procedure OnMove(Sender: TObject); var   x,y,z: integer; s: string; begin   inc(old_time);//счетчик, сколько тиков прошло с последнего клика. исп. при следованию по маршруту   inc(chk_time);//счетчик   if not MoveToPathEnabled then begin     try       TTimer(Sender).Enabled:=False;     except     end;     SendMsg('Движение остановлено');     msg.Lines.Add('Движение остановлено');     exit;   end; {  //возможно мы пали смертью храбрых, то не дергаемся пока   if myHP<=0 then begin     sendmsg('Die!');     msg.Lines.Add('Умерли!');     MoveToPathEnabled:=False;     exit;   end;}   MoveTimer.Interval:=MoveTrigerDelay;   debugmsg('MoveTrigerDelay:'+inttostr(MoveTimer.Interval));   try     //проверяем на существ. объекта     //при отладке всякое может быть     MovePath.Count;   except     TTimer(Sender).Enabled:=False;     exit;   end;   s:=MovePath[MoveStepIndex];   x:=ExtractValue(s,1);   y:=ExtractValue(s,2);   z:=ExtractValue(s,3);   if PosInRange(x,y,z,RangeToCheckPoint) then begin     if MoveToForward then begin       if MoveStepIndex=MovePath.Count-1 then begin         MoveToPathEnabled:=False;         //эта точка на месте рыбалки или у фишермэна если после смерти         SendMsg('Мы по идее в конечной точке');         case cmd of           'move': begin {просто идем по маршруту} end;           'fishing': begin //ловим             CanFishHere:=true; //здесь можно ловить             fishin.enabled:=true; //продолжим ловить рыбу             msg.Lines.Add('Продолжим ловить рыбу!!!');             debugmsg('Продолжим ловить рыбу!!!');           end;           'death': begin //продаём             msg.Lines.Add('Мы у фишермэна, бежим рыбачить...');             SendMsg('Мы у фишермэна, бежим рыбачить...');             case MestoLovli of               1: begin cmd:='fishing'; MestoLovli1; end;               2: begin cmd:='fishing'; MestoLovli2; end;               3: begin cmd:='fishing'; MestoLovli3; end;             end;           end;         end;         exit;       end       else begin         inc(MoveStepIndex);       end;     end     else begin        if MoveStepIndex>0 then dec(MoveStepIndex)        else begin           MoveToPathEnabled:=False;           //эта точка у фишермэна           SendMsg('Мы по идее в начальной точке');           case cmd of             'move': begin {просто идем по маршруту} end;             'fishing': begin //ловим               CanFishHere:=true; //здесь можно ловить               fishin.enabled:=true; //продолжим ловить рыбу               msg.Lines.Add('Продолжим ловить рыбу!!!');               SendMsg('Продолжим ловить рыбу!!!');             end;             'trade': begin //продаём               trade:=200;               trade1.enabled:=true;               TradeCount:=0;               msg.Lines.Add('Продадим/купим/обменяем...');               SendMsg('Продадим/купим/обменяем...');             end;           end;           exit;        end;     end;     //мы достигли чекпоинта идем далее     debugMsg('бежим к #'+inttostr(MoveStepIndex));     msg.Lines.Add('бежим к #'+inttostr(MoveStepIndex));     s:=MovePath[MoveStepIndex];     x:=ExtractValue(s,1);     y:=ExtractValue(s,2);     z:=ExtractValue(s,3);     MoveTo(x,y,z);     chk_time:=0; //сбрасываем если дошли до чекпоинта   end else begin     MoveTo(x,y,z); //тыкаем ещё раз, чтобы не стоял     debugMsg('тыкаем ещё раз:'+s+' x:='+inttostr(x)+' y:='+inttostr(y)+' myx:='+inttostr(myx)+' myy:='+inttostr(myy));     msg.Lines.Add('тыкаем ещё раз:'+s+' x:='+inttostr(x)+' y:='+inttostr(y)+' myx:='+inttostr(myx)+' myy:='+inttostr(myy));   end;   //проверка на застревание   if chk_time=7 then   //сколько ждем секунд, чтобы решить что застряли     if MoveToForward and (MoveStepIndex>0) then begin       dec(MoveStepIndex);       SendMsg('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));       msg.Lines.Add('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));     end else if MoveStepIndex<MovePath.Count then begin       inc(MoveStepIndex);       SendMsg('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));       msg.Lines.Add('Проверка на застревание - бежим к #'+inttostr(MoveStepIndex));     end; end; //...................................... //*************************************************************** function ExtractValue(sData: string;nIndex: integer): integer; var   s: string;   i,j: integer; begin   i:=0;j:=0;s:='';   s:=sData;   while j<nIndex do   begin     i:=pos('|',S);     if i>=0 then     begin       s:=copy(s,i+1,length(s)-i);       inc(j);     end     else       break;   end;   i:=pos('|',s);   if i>=0 then     s:=copy(s,1,i-1);   try     result:=strtoint(s);   except   end; end; //...................................... //*************************************************************** function ExtractIDValues(sData: string): integer; var   s: string;   i,j: integer; begin   i:=0;s:='';   s:=sData;   i:=pos('=',s);   if i>=0 then     s:=copy(s,1,i-1);   try     result:=strtoint(s);   except     result:=110;   end; end; //...................................... //*************************************************************** // Все перемещения чара здесь!!! //*************************************************************** //1 бежим от фишермана на берег в Гиран-харбор //------------------------------------------------- procedure Mestolovli1; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'Mestolovli1'+RecordFileExt);    msg.Lines.Add('Место ловли: Mestolovli1');   except    SendMsg('файл пути не найден');    exit;   end;   case cmd of     'fishing': GoToPath(go); //бежим ловить     'trade': GoToPath(back); //бежим продавать   end; end; //...................................... //------------------------------------------------- //2 бежим от фишермана на берег в Гиран-харбор //------------------------------------------------- procedure Mestolovli2; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'Mestolovli2'+RecordFileExt);    msg.Lines.Add('Место ловли: Mestolovli2');   except    SendMsg('файл пути не найден');    exit;   end;   case cmd of     'fishing': GoToPath(go); //бежим ловить     'trade': GoToPath(back); //бежим продавать   end; end; //...................................... //------------------------------------------------- //3 бежим от фишермана на берег в Гиран-харбор //------------------------------------------------- procedure Mestolovli3; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'Mestolovli3'+RecordFileExt);    msg.Lines.Add('Место ловли: Mestolovli3');   except    SendMsg('файл пути не найден');    exit;   end;   case cmd of     'fishing': GoToPath(go); //бежим ловить     'trade': GoToPath(back); //бежим продавать   end; end; //...................................... //------------------------------------------------- //1 меняем место //------------------------------------------------- procedure MenayemMesto1; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'MenayemMesto1'+RecordFileExt);    msg.Lines.Add('Меняю место ловли: MenayemMesto1');   except    SendMsg('файл пути не найден');    exit;   end;   GoToPath(go); //бежим ловить {  MoveToForward:=go;   MoveStepIndex:=0;   MoveToPathEnabled:=True;   MoveTimer.Enabled:=True;   msg.Lines.Add('Репозиция...'); } end; //...................................... //------------------------------------------------- //2 меняем место //------------------------------------------------- procedure MenayemMesto2; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'MenayemMesto2'+RecordFileExt);    msg.Lines.Add('Меняю место ловли: MenayemMesto2');   except    SendMsg('файл пути не найден');    exit;   end;   GoToPath(go); //бежим ловить end; //...................................... //------------------------------------------------- //3 меняем место //------------------------------------------------- procedure MenayemMesto3; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'MenayemMesto3'+RecordFileExt);    msg.Lines.Add('Меняю место ловли: MenayemMesto3');   except    SendMsg('файл пути не найден');    exit;   end;   GoToPath(go); //бежим ловить end; //...................................... //------------------------------------------------- //1 Репозиция на месте рыбалки после боя с мобом //------------------------------------------------- procedure Reposition1; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'Reposition1'+RecordFileExt);    msg.Lines.Add('->Reposition1');   except    SendMsg('файл пути не найден');    exit;   end;   //GoToPath(go); //бежим ловить   MoveToForward:=go;   MoveStepIndex:=0;   MoveToPathEnabled:=True;   MoveTimer.Enabled:=True; end; //...................................... //------------------------------------------------- //2 Репозиция на месте рыбалки после боя с мобом //------------------------------------------------- procedure Reposition2; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'Reposition2'+RecordFileExt);    msg.Lines.Add('Репозиция после боя: Reposition2');   except    SendMsg('файл пути не найден');    exit;   end; //  GoToPath(go); //бежим ловить   MoveToForward:=go;   MoveStepIndex:=0;   MoveToPathEnabled:=True;   MoveTimer.Enabled:=True; end; //...................................... //------------------------------------------------- //3 Репозиция на месте рыбалки после боя с мобом //------------------------------------------------- procedure Reposition3; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'Reposition3'+RecordFileExt);    msg.Lines.Add('Репозиция после боя: Reposition3');   except    SendMsg('файл пути не найден');    exit;   end; //  GoToPath(go); //бежим ловить   MoveToForward:=go;   MoveStepIndex:=0;   MoveToPathEnabled:=True;   MoveTimer.Enabled:=True; end; //...................................... //------------------------------------------------- //Оживаем после боя с мобом //------------------------------------------------- procedure AfterDeath; var  s:string;   x,y,z : integer; begin   //загружаем маршрут   try    MovePath.LoadFromFile(RecordFilesPath+'afterdeath'+RecordFileExt);    msg.Lines.Add('После смерти: AfterDeath');   except    SendMsg('файл пути не найден');    exit;   end;   //GoToPath(go); //бежим ловить   MoveToForward:=go;   MoveStepIndex:=0;   MoveToPathEnabled:=True;   MoveTimer.Enabled:=True;   msg.Lines.Add('Бежим к фишермэну...'); 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);   MyMaxHP:=ReadD(i);   MyHP:=ReadD(i);   MyMaxMP:=ReadD(i); //чисто информативно   MyMP:=ReadD(i);   pbMyHP.max:=MyMaxHP;   pbMyHP.position:=MyHP;   pbMyMP.max:=MyMaxMP;   pbMyMP.position:=MyMP;   gbMyHP.caption:='           HP:        '+inttostr(MyHP)+'/'+inttostr(MyMaxHP)+'          ';   gbMyMP.caption:='           MP:        '+inttostr(MyMP)+'/'+inttostr(MyMaxMP)+'          '; end; //...................................... //*************************************************************** procedure StatusUpdate;       //обновление данных о себе var   i: integer; begin   for i:=0 to ReadD(6)-1 do     case pck[i*8+10] of       #$09: MyHP:=ReadD(i*8+14);       #$0A: MyMaxHP:=ReadD(i*8+14);       #$0B: MyMP:=ReadD(i*8+14);       #$0C: MyMaxMP:=ReadD(i*8+14);     end;   pbMyHP.max:=MyMaxHP;   pbMyHP.position:=MyHP;   pbMyMP.max:=MyMaxMP;   pbMyMP.position:=MyMP;   gbMyHP.caption:='           HP:        '+inttostr(MyHP)+'/'+inttostr(MyMaxHP)+'          ';   gbMyMP.caption:='           MP:        '+inttostr(MyMP)+'/'+inttostr(MyMaxMP)+'          ';   if (MyMaxHP<>0) then        //вычисляем процентное соотношение хп   begin     PercentHP:=strtoint(EditHealt.Text);     NeedBuy:=strtoint(EditLure.Text);     but:=Round((MyMaxHP/100)*PercentHP); //при каком количестве хп юзать бутылку лечения   end; end; //...................................... //*************************************************************** //04=UserInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Name)d(Race)d(Sex)d(ClassID)d(Level)f(Exp)d(STR)d(DEX)d(CON)d(INT)d(WIT)d(MEN)d(MaxHP)d(CurHP)d(MaxMP)d(CurMP)d(SP)d(CurLoad)d(MaxLoad)d(d)d(DHair)d(Rear)d(Lear)d(Neck)d(RFinger)d(LFinger)d(Head)d(RHand)d(LHand)d(Gloves)d(Chest)d(Legs)d(Feet)d(Back)d(LRHand)d(Hair)d(Face)d(DHair)d(Rear)d(Lear)d(Neck)d(RFinger)d(LFinger)d(Head)d(RHand)d(LHand)d(Gloves)d(Chest)d(Legs)d(Feet)d(Back)d(LRHand)d(Hair)d(Face)-(0068)d(Patk)d(Paspd)d(Pdef)d(evasion)d(accur)d(crithit)d(Matk)d(Maspd)d(Paspd)d(Mdef)d(PvpFlag)d(Karma)d(runSpd)d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRSpd)d(flWSpd)d(flyRSpd)d(flyWSpd)f(MoveMul)f(aspdMul)f(collisRadius)f(collisHeight)d(HairStyle)d(HairColor)d(Face)d(AccessLvl)s(Title)d(clanID)d(clanCrestId)d(AllyID)d(AllyCrestId)d(ClanLeader)b(Mount)b(shop)b(DwarfCraft)d(PKkills)d(PVPkills)w(cubics)w(cubID)b(findparty)d(abnEffects)b(c)d(clanPrivil)w(RecomLeft)w(RecomHave)d(d)w(InventLimit)d(classId)d(sEff)d(maxCP)d(curCP)b(Mount)b(Team)d(clanBigCrestId)b(Noble)b(Hero)b(Fishing)d(fishX)d(fishY)d(fishZ)d(NameColor)b(isRun)d(PledgeClass)d(d)d(TitleColor)d(d)d(CurseWeap) //03=CharInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Name)d(Race)d(Sex)h(ClassID)d(DHair)i(Head)i(RHand)i(LHand)i(Gloves)i(Chest)i(Legs)i(Feet)i(Back)i(LRHand)i(Hair)i(PvpFlag)d(Karma)d(MSpeed)d(PSpeed)d(PvpFlag)d(Karma)d(runSpd)d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRunSpd)d(flWalkSpd)d(flyRSpd)d(flyWSpd)f(SpdMul)f(ASpdMul)f(collisRadius)f(collisHeight)d(HairStyle)d(HairColor)d(Face)s(Title)d(clanID)d(clanCrest)d(allyID)d(allyCrest)d(siegeFlag)b(isStand)b(isRun)b(isInFight)b(isAlikeDead)b(Invis)b(Mount)b(shop)w(cubics)w(cubID)b(findparty)d(abnEffects)b(RecomLeft)w(RecomHave)h(ClassID)d(maxCP)d(curCP)b(isMounted)b(Team)d(clanBigCrestId)b(isNoble)b(isHero)b(isFishing)d(fishX)d(fishY)d(fishZ)d(NameColor)b(isRun)d(d)d(PItem)d(PledgeClass)d(PledgeColor)d(TitleColor)d(Cursed) procedure TargetInfo; //обновление данных о цели var   i:word; begin   AttackerOID:=ReadD(18);   AttackerX:=ReadD(2);   AttackerY:=ReadD(6);   AttackerZ:=ReadD(10);   i:=22;   ReadS(i);   if interlude then inc(i,48) else inc(i,44);   AttackerMaxHP:=ReadD(i);   AttackerHP:=ReadD(i);   pbTargetHP.max:=AttackerMaxHP;   pbTargetHP.position:=AttackerHP;   gbTargetHP.caption:='           HP:        '+inttostr(AttackerHP)+'/'+inttostr(AttackerMaxHP)+'          '; end; //...................................... //*************************************************************** procedure TargetStatusUpdate;       //обновление данных о цели var   i: integer; begin   for i:=0 to ReadD(6)-1 do     case pck[i*8+10] of       #$09: AttackerHP:=ReadD(i*8+14);       #$0A: AttackerMaxHP:=ReadD(i*8+14);     end;   pbTargetHP.max:=AttackerMaxHP;   pbTargetHP.position:=AttackerHP;   gbTargetHP.caption:='           HP:        '+inttostr(AttackerHP)+'/'+inttostr(AttackerMaxHP)+'          '; end; //...................................... //*************************************************************** function ParseCmd(cmd: string):boolean; var   s: string;   i,j,k: integer;   params: array[0..9] of string; //до 10 параметров, должно хватить begin   result:=False;   try     j:=-1;     i:=pos(cmdPrefix,trim(cmd));     if i=0 then       exit;     debugmsg('start ParseCmd: idx:'+inttostr(i)+' cmd: '+cmd);     result:=true;     k:=length(cmdPrefix);     s:=trim(lowercase(cmd));     s:=trim(copy(s,i+k,length(cmd)-i));     debugmsg('trim:'+s);     repeat       inc(j);       k:=pos(cmdDlm,s);       if k>0 then       begin         params[j]:=copy(s,1,k-1);         s:=trim(copy(s,k+length(cmdDlm),length(s)-k));         debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);       end       else       begin         params[j]:=s;         debugmsg('parm is one');       end;     until pos(cmdDlm,S)=0;     if j>-1 then     begin       inc(j);       params[j]:=s;       debugmsg('extract idx:'+inttostr(j) +' param:'+params[j]);     end;     if j=-1 then       exit;     //*******************************************************     //пропарсили команду     //теперь выполняем     //*******************************************************     if params[0]=cmdRecordPath then     begin        if params[1]<>'' then          RecordPathFileName:=params[1]        else          RecordPathFileName:=RecordPathName;        StartRecord;     end     else     if params[0]=cmdSavePath then     begin        StopRecord;     end     else     if params[0]=cmdMove then     begin        if params[1]='' then        begin          SendMsg('хз куда бежать, укажите имя');          exit;        end;        try          MovePath.LoadFromFile(RecordFilesPath+params[1]+RecordFileExt);        except          SendMsg('файл пути не найден');          exit;        end;        GoToPath(true);     end     else     if params[0]=cmdBack then     begin        if params[1]='' then        begin          SendMsg('хз куда бежать, укажите имя');          exit;        end;        try          MovePath.LoadFromFile(RecordFilesPath+params[1]+RecordFileExt);        except          SendMsg('файл пути не найден');          exit;        end;        GoToPath(false);     end     else     if (params[0]=cmdStop) and MoveToPathEnabled then       MoveToPathEnabled:=False;   except     debugmsg('error in ParseCmd,params='+cmd);   end; 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(fish1));   stats.Lines.Add('Сорвалось: '+IntToStr(fish2));   stats.Lines.Add('Преобр. успешно: '+IntToStr(lucky1));   stats.Lines.Add('Преобр. неуспешно: '+IntToStr(failed1));   stats.Lines.Add('На нас напали: '+IntToStr(mob1)+' раз');   stats.Lines.Add('Погибли: '+IntToStr(death1)+' раз');   stats.Lines.Add('');   stats.Lines.Add('MyMaxHP: '+IntToStr(MyMaxHP));   stats.Lines.Add('MyHP: '+IntToStr(MyHP));   stats.Lines.Add('MyOID: '+IntToStr(MyOID));   stats.Lines.Add('MyXpos: '+IntToStr(MyX));   stats.Lines.Add('MyYpos: '+IntToStr(MyY));   stats.Lines.Add('MyZpos: '+IntToStr(MyZ));   stats.Lines.Add('');   stats.Lines.Add('ReadyToSell: '+VarToStr(ReadyToSell));   stats.Lines.Add('ReadyToBuy: '+VarToStr(ReadyToBuy));   stats.Lines.Add('ReadyToMultiSell: '+VarToStr(ReadyToMultiSell));   stats.Lines.Add('');   stats.Lines.Add('PMMesto: '+IntToStr(PMMesto));   stats.Lines.Add('MMesto: '+IntToStr(MMesto));   stats.Lines.Add('MestoLovli: '+IntToStr(MestoLovli));   stats.Lines.Add('');   stats.Lines.Add('old_time: '+IntToStr(old_time));   stats.Lines.Add('chk_time: '+IntToStr(chk_time));   stats.Lines.Add('CanFishHere: '+VarToStr(CanFishHere));   stats.Lines.Add('');   stats.Lines.Add('but: '+IntToStr(but));   stats.Lines.Add('PercentHP: '+IntToStr(PercentHP));   stats.Lines.Add('Colvohp: '+VarToStr(Colvohp));   stats.Lines.Add('NeedBuy: '+VarToStr(NeedBuy));   stats.Lines.Add('isDie: '+VarToStr(isDie));   stats.Lines.Add('isFishing: '+VarToStr(isFishing));   stats.Lines.Add('iii: '+IntToStr(iii));   stats.Lines.Add('');   if (WeaponUse1=false) then stats.Lines.Add('Юзать оружие?: НЕТ!') else stats.Lines.Add('Юзать оружие?: ДА!');   if (ShieldUse1=false) then stats.Lines.Add('Юзать щит?: НЕТ!') else stats.Lines.Add('Юзать щит?: ДА!');   if (HPuse1=false) then stats.Lines.Add('Юзать бутылки?: НЕТ!') else stats.Lines.Add('Юзать бутылки?: ДА!');   if (ShotUse1=false) then stats.Lines.Add('Юзать фишин-шоты?: НЕТ!') else stats.Lines.Add('Юзать фишин-шоты?: ДА!');   if not CheckBoxPU.Checked then stats.Lines.Add('Потрошим?: НЕТ!') else stats.Lines.Add('Потрошим?: ДА!');   if not CheckBoxFO.Checked then stats.Lines.Add('FO->PFO: НЕТ!') else stats.Lines.Add('FO->PFO?: ДА!'); end; //...................................... //*************************************************************** procedure OnShowInfo(Sender: TObject); //выводим в форму begin   ShowInfo;   if (MyHP<but) and HPuse1 then begin //если разрешено использование бутылок, то используем     if (iii>=5) and (colvohp>0) then begin       UseItem(HPOID); //проверка количества бутылок       iii:=0; //счетчик для личилок, чтобы не спамить     end else inc(iii)   end; end; //...................................... //*************************************************************** procedure OnCreatePFO(Sender: TObject); //выводим в форму begin   buf:=hstr('B8 A8 02 00 00'); //create GFO///////////////////////////////////////////////////////////////////////////////   SendToServerEx(Name);   delay(2000);   buf:=hstr('B8 A9 02 00 00'); //create PFO ////////////////////////////////////////////////////////////////////////////   SendToServerEx(Name); end; //...................................... //*************************************************************** procedure RequestRestartPoint; begin   buf:=#$7D;//////////////////////////////////////////////////////////////////////////////////////   WriteD(00);   SendToServerEx(Name);   MoveTimer.Interval:=10000; end; //...................................... //*************************************************************** //21=RequestBypassToServer:s(Cmd) //посылаем, чтобы получить пакет BuyItem с ListID procedure RequestByPassToServer(cmd:string); begin   buf:=#$23;///////////////////////////////////////////////////////////////////////////////////////   WriteS(cmd);   SendToServerEx(Name); end; //...................................... //*************************************************************** //s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d(ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice) //c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectID)i(ItemID)d(Count) //продаем по одному типу procedure RequestSellItem(ItemOID,ItemID,Count:integer); begin   if ReadyToSell then begin     msg.Lines.Add('Продадим предмет OID:'+inttostr(ItemOID)+' ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));     buf:=#$37;//////////////////////////////////////////////////////////////////////////////////     WriteD(ListID);     WriteD(1);     WriteD(ItemOID);     WriteD(ItemID);     WriteD(Count);     SendToServerEx(Name);   end; end; //...................................... //*************************************************************** //c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count) //купим по одному типу procedure RequestBuyItem(ItemID,Count:integer); begin   if ReadyToBuy then begin     msg.Lines.Add('Купим предмет ID:'+inttostr(ItemID)+' в кол-ве:'+inttostr(count));     buf:=#$40;/////////////////////////////////////////////////////////////////////////////////////////////////////////     WriteD(ListID);     WriteD(1);     WriteD(ItemID);     WriteD(Count);     SendToServerEx(Name);   end; end; //...................................... //*************************************************************** //cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amount) //продаем по одному типу procedure RequestMultiSellItem(ListId,EntryID,Count:integer); begin   msg.Lines.Add('Обменяем предмет ListID:'+inttostr(ListID)+' EntryID:'+inttostr(EntryID)+' в кол-ве:'+inttostr(count));   if ReadyToMultiSell then begin     buf:=#$B0;////////////////////////////////////////////////////////////////////////////////////////////     WriteD(ListID);     WriteD(EntryId);     WriteD(Count);     SendToServerEx(Name);   end; end; //...................................... //*************************************************************** procedure UseItem(OID:integer); begin   buf:=#$19;///////////////////////////////////////////////////////////////////////////////////////////////   WriteD(OID);   WriteD(00);   SendToServerEx(Name); end; //...................................... //*************************************************************** //2F=RequestMagicSkillUse:dMagicID)d(CtrlPressed)b(ShiftPressed) procedure MagicSkillUse(MagicID:integer); begin   buf:=#$39;//////////////////////////////////////////////////////////////////////////////////   WriteD(MagicID);   WriteD(00);   WriteC(00);   SendToServerEx(Name); end; //...................................... //*************************************************************** procedure Pumping; begin   if (ShotOID<>0) and (strtoint(EditFShotVal.text)>0) then UseItem(ShotOID)   else if shotuse1 then msg.Lines.Add('Кончились шоты!'); //просто сообщаем, без шотов можно ловить   MagicSkillUse(pump); end; //...................................... //*************************************************************** procedure Reeling; begin   if (ShotOID<>0) and (strtoint(EditFShotVal.text)>0) then UseItem(ShotOID)   else if shotuse1 then msg.Lines.Add('Кончились шоты!'); //просто сообщаем, без шотов можно ловить   MagicSkillUse(reel); end; //...................................... //*************************************************************** procedure Fishing; begin   if strtoint(EditLureVal.text)>1 then begin //оставляем один крючек, чтобы не сбился ItemOID     if not CanFishHere then begin       msg.Lines.Add('Здесь нельзя ловить...');       case MestoLovli of         1: begin cmd:='fishing'; Reposition1; end;         2: begin cmd:='fishing'; Reposition2; end;         3: begin cmd:='fishing'; Reposition3; end;       end;       exit;     end;     MagicSkillUse(fish);   end   else begin     msg.Lines.Add('Кончились крючки!');     fishin.enabled:=false;     if CheckBoxFisherman.Checked then begin       case MestoLovli of         1: begin cmd:='trade'; MestoLovli1; end;         2: begin cmd:='trade'; MestoLovli2; end;         3: begin cmd:='trade'; MestoLovli3; end;       end;       msg.Lines.Add('Бежим в магазин...');     end;   end; end; //...................................... //*************************************************************** procedure OnFishing(Sender: TObject); begin   if not isEquip(MyRodID) then begin giverod; exit; end;   if not isEquip(MyLureID) then begin givelure; exit; end;   fishin.enabled:=false;   Fishing;   isFishing:=true; //ловим end; //...................................... //*************************************************************** //04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag) procedure Target(Attacker: Integer); begin   buf:=#$1F;/////////////////////////////////////////////////////////////////////////////   WriteD(Attacker);   WriteD(MyX);   WriteD(MyY);   WriteD(MyZ);   WriteC(00);   SendToServerEx(Name); end; //...................................... //*************************************************************** //0A=Attack:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag) procedure Attack(Attacker: Integer); begin   buf:=#$01;////////////////////////////////////////////////////////////////////////////   WriteD(Attacker);   WriteD(MyX);   WriteD(MyY);   WriteD(MyZ);   WriteC(00);   SendToServerEx(Name); end; //...................................... //*************************************************************** procedure TargetAttacker(Attacker: Integer); begin   msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));   fishin.enabled:=false;   Target(Attacker);   delay(800);   Target(Attacker);   delay(800); end; //...................................... //*************************************************************** procedure GiveWeapon; begin   if WeaponOID=0 then exit;   delay(1000);   msg.Lines.Add('Берём='+IntToStr(WeaponOID));   if not isEquip(MyWeaponID) then UseItem(WeaponOID); //попробуем одеть снова end; //...................................... //*************************************************************** procedure GiveShield; begin   if ShieldOID=0 then exit;   delay(1000);   msg.Lines.Add('Берём='+IntToStr(ShieldOID));   if not isEquip(MyShieldID) then UseItem(ShieldOID); //попробуем одеть снова end; //...................................... //*************************************************************** procedure GiveRod; begin   if RodOID=0 then exit;   delay(1000);   msg.Lines.Add('Берём='+IntToStr(RodOID));   if not isEquip(MyRodID) then UseItem(RodOID); //попробуем одеть снова end; //...................................... //*************************************************************** procedure GiveLure; begin   if LureOID=0 then exit;   delay(1000);   msg.Lines.Add('Берём='+IntToStr(LureOID));   if not isEquip(MyLureID) then UseItem(LureOID); //попробуем одеть снова end; //...................................... //*************************************************************** function isEquip(ItemID:integer): boolean; begin   FindItem(ItemId);   if ItemBase2[4,1]=0 then Result:=false else Result:=true; end; //...................................... //*************************************************************** // Вся торговля здесь!!! //*************************************************************** procedure OnTrade(Sender: TObject); begin   case trade of     //-------------------------------------------------     //продаем фишерману из массива TradeSellItem     //-------------------------------------------------     200: begin       if ReadyToSell then exit; //если еще не продали предыдущую вещь, то выходим сразу       //мы у фишермана, продаем всё ненужное       if FishermanOID=0 then begin         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');         exit; //выходим       end;       if (TradeCount=TradeSellItemCount) then begin //проверка на выход из массива         trade:=300;         msg.Lines.Add('Всё продали!');         msg.Lines.Add('Переход к покупкам...');         TradeCount:=0; //начнем сначала массива       end else begin         if FindItem(TradeSellItem[TradeCount])<>0 then begin //проверка, что предмет есть в инвентаре и его можно продать           TargetAttacker(FishermanOID); //фишермана в таргет           msg.Lines.Add('Готовы продать:'+inttostr(TradeSellItem[TradeCount]));           ReadyToSell:=true; //готовы продавать         end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeSellItem[TradeCount]));         inc(TradeCount); //выбираем следующий предмет         msg.Lines.Add('TradeCount/TradeSellItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeSellItemCount-1));       end;     end;     //-------------------------------------------------     //покупаем у фишермана  из массива TradeBuyItem     //-------------------------------------------------     300: begin       if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу       //мы у фишермана, покупаем крючки       if FishermanOID=0 then begin         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');         exit; //выходим       end;       if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива         trade:=400;         msg.Lines.Add('Всё купили!');         msg.Lines.Add('Переход к обмену...');         TradeCount:=0; //начнем сначала массива       end else begin         if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin           TargetAttacker(FishermanOID); //фишермана в таргет           msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));           ReadyToBuy:=true; //готовы продавать           NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50           msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));         end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));         Trd:=TradeCount;         inc(TradeCount);         msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));       end;     end;     //-------------------------------------------------     //обмениваем у фишермана на пруфы     //-------------------------------------------------     400: begin       if ReadyToMultiSell then exit; //если еще не обменяли предыдущую вещь, то выходим сразу       //мы у фишермана, обмениваем всё на пруфы       if FishermanOID=0 then begin         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');         exit; //выходим       end;       if TradeCount=TradeMultiItemCount then begin //проверка на выход из массива         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Всё обменяли!');         case MestoLovli of           1: begin cmd:='fishing'; MestoLovli1; end;           2: begin cmd:='fishing'; MestoLovli2; end;           3: begin cmd:='fishing'; MestoLovli3; end;         end;         msg.Lines.Add('Бежим на берег...');         TradeCount:=0;       end else begin         if (TradeMultiItem[TradeCount]<>FO) and (TradeMultiItem[TradeCount]<>GFO) then begin           if FindItem(TradeMultiItem[TradeCount])<>0 then begin             TargetAttacker(FishermanOID); //фишермана в таргет             msg.Lines.Add('Готовы обменять:'+inttostr(TradeMultiItem[TradeCount]));             ReadyToMultiSell:=true; //готовы обменивать           end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeMultiItem[TradeCount]));           Trd:=TradeCount;         end;         inc(TradeCount);         msg.Lines.Add('TradeCount/TradeMultiItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeMultiItemCount-1));       end;     end;   end; 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 maxitems do begin     //очищаем масив     ItemBase[1,i]:=0;    //OID     ItemBase[2,i]:=0;   //ID     ItemBase[3,i]:=0//кол-во     ItemBase[4,i]:=0; //isEquipped   end;   ColvoItm:=0;   ListCount:=ReadH(4); //количество итемов не должно превышать max!   if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));   //Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID   for i:=1 to ListCount do begin ///////////////////////////////////////////////////////////     itemBase[1,i]:=ReadD((i-1)*72+8); //OID //////////////////////////////////////////////////////////////////////     itemBase[2,i]:=ReadD((i-1)*72+8+4); //ItemID ///////////////////////////////////////////////////////////     itemBase[3,i]:=ReadD((i-1)*72+8+4+4+4); //ItemCount ////////////////////////////////////////////////////////////////////     itemBase[4,i]:=ReadH((i-1)*72+8+4+4+4+4+2+2); //isEquipped ///////////////////////////////////////////////////////////////     //Say('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));     //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)     //собираем ID и OID предметов и оружия     case itemBase[2,i] of       MyWeaponID : begin         WeaponOId:=itemBase[1,i];         WeaponId:=itemBase[2,i];       end;       MyShieldID : begin         ShieldOId:=itemBase[1,i];         ShieldId:=itemBase[2,i];       end;       MyShotID : begin         ShotOID:=itemBase[1,i];         ColvoShot:=itemBase[3,i];         EditFShotVal.Text:=inttostr(itemBase[3,i]);       end;       MyRodID : begin         RodOId:=itemBase[1,i];       end;       MyLureID : begin         LureOId:=itemBase[1,i];         ColvoLure:=itemBase[3,i];         EditLureVal.Text:=inttostr(itemBase[3,i]);       end;       MyHPID : begin         HPOId:=itemBase[1,i];         ColvoHP:=itemBase[3,i];         EditHPotionVal.Text:=inttostr(itemBase[3,i]);       end;     end;   end;   ColvoItm:=ListCount;   if debug then msg.Lines.Add('>ColvoItm='+IntToStr(Colvoitm));   //вносим изменения в массив   StringList.Clear;   try     for i:=1 to ListCount do begin       try         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 CheckBoxRod.Checked then begin //наполняем комбобокс     with ComboBoxRod do     begin       Items.Clear;       Items.Assign(StringList);       ItemIndex:=0;     end;   end;   if not CheckBoxLure.Checked then begin //наполняем комбобокс     with ComboBoxLure do     begin       Items.Clear;       Items.Assign(StringList);       ItemIndex:=0;     end;   end;   if not CheckBoxWeapon.Checked then begin //наполняем комбобокс     with ComboBoxWeapon do     begin       Items.Clear;       Items.Assign(StringList);       ItemIndex:=0;     end;   end;   if not CheckBoxShield.Checked then begin //наполняем комбобокс     with ComboBoxShield do     begin       Items.Clear;       Items.Assign(StringList);       ItemIndex:=0;     end;   end;   if not CheckBoxFShot.Checked then begin //наполняем комбобокс     with ComboBoxFShot do     begin       Items.Clear;       Items.Assign(StringList);       ItemIndex:=0;     end;   end;   if not CheckBoxHPotion.Checked then begin //наполняем комбобокс     with ComboBoxHPotion 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) procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID var   i, ii, j, ObjID, ItemID, ItemCount, ListCount, UpdType, isEquipped: integer;   add : boolean; begin   add:=false;   ListCount:=ReadH(2); //количество итемов////////////////////////////////////////////////////////////////////   //Пробегаем по Инвентарю и сохраняем пары ObjectID - colv   for i:=1 to ListCount do begin     UpdType:=ReadH((i-1)*74+4); /////////////////////////////////////////////////////////////////////////     ItemOID:=ReadD((i-1)*74+8);     //ObjectID///////////////////////////////////////////////////////////////////     ItemID:=ReadD((i-1)*74+12);     //ItemID//////////////////////////////////////////////////////////////////////////////     ItemCount:=ReadD((i-1)*74+20); //Count //////////////////////////////////////////////////////////////////////////     isEquipped:=ReadH((i-1)*74+28);     case UpdType of       //добавлен       1: begin          for ii:=1 to maxitems do begin            if (ItemBase[1,ii]=0) and (add=false) then begin              ItemBase[1,ii]:=ItemOID;              ItemBase[2,ii]:=ItemID;              ItemBase[3,ii]:=ItemCount;              ItemBase[4,ii]:=isEquipped;              //msg.Lines.Add('Добавили предмет!');              //msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));              ColvoItm:=ColvoItm+ItemCount;              add:=true;            end;          end;          case ItemID of            6411..6518,7726..7806,8351..8359,8403..8483: begin              if not CheckBoxPU.Checked then exit;              delay(500); //стоит здесь и меньше нельзя              msg.Lines.Add('Потрошим! ObjectID='+IntToStr(ItemOID)+' ItemID='+IntToStr(ItemID)+' ColvoItem='+IntToStr(colv));              UseItem(ItemOID);//потрошим рыбу            end;            7807..7809,6519..6527: begin              if ItemID=MyLureID then begin                LureOID:=ItemOID;                ColvoLure:=ItemCount;                EditLureVal.Text:=inttostr(ItemCount);              end;            end;            6535..6540: begin              if ItemID=MyShotID then begin                ShotOID:=ItemOID;                ColvoShot:=ItemCount;                EditFShotVal.Text:=inttostr(ItemCount);              end;            end;            1060..1061: begin              if not CheckBoxHPotion.Checked then exit;              if ItemID=MyHPID then begin                HPOID:=ItemOID;                ColvoHP:=ItemCount;                EditHPotionVal.Text:=inttostr(ItemCount);              end;            end;          end;       end;       //изменен       2: begin          for ii:=1 to maxitems do begin            if ItemBase[1,ii]=ItemOID then begin              ItemBase[3,ii]:=ItemCount;              ItemBase[4,ii]:=isEquipped;              //msg.Lines.Add('Изменяем параметры предмета!');              //msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));            end;          end;          case ItemID of            6411..6518,7726..7806,8351..8359,8403..8483: begin              if not CheckBoxPU.Checked then exit;              delay(500); //стоит здесь и меньше нельзя              msg.Lines.Add('Потрошим! ObjectID='+IntToStr(ItemOID)+' ItemID='+IntToStr(ItemID)+' ColvoItem='+IntToStr(colv));              UseItem(ItemOID);//потрошим рыбу            end;            7807..7809,6519..6527: begin              if ItemID=MyLureID then begin                LureOID:=ItemOID;                ColvoLure:=ItemCount;                EditLureVal.Text:=inttostr(ItemCount);              end;            end;            6535..6540: begin              if ItemID=MyShotID then begin                ShotOID:=ItemOID;                ColvoShot:=ItemCount;                EditFShotVal.Text:=inttostr(ItemCount);              end;            end;            1060..1061: begin              if ItemID=MyHPID then begin                HPOID:=ItemOID;                ColvoHP:=ItemCount;                EditHPotionVal.Text:=inttostr(ItemCount);              end;            end;          end;       end;       //удален       3: begin          for ii:=1 to maxitems do begin            if ItemBase[1,ii]=ItemOID then begin              //msg.Lines.Add('Удаляем предмет!');              //msg.Lines.Add('i='+inttostr(ii)+' ItemBase[1,ii]='+IntToStr(ItemBase[1,ii])+' ItemBase[2,ii]='+IntToStr(ItemBase[2,ii])+' ItemBase[3,ii]='+IntToStr(ItemBase[3,ii]));              ItemBase[1,ii]:=0;              ItemBase[2,ii]:=0;              ItemBase[3,ii]:=0;              ItemBase[4,ii]:=0;              ColvoItm:=ColvoItm-ItemCount;            end;          end;          case ItemID of            7807..7806,6519..6527: begin              if ItemID=MyLureID then begin                LureOID:=ItemOID;                ColvoLure:=ItemCount;                EditLureVal.Text:=inttostr(ItemCount);              end;            end;            6535..6540: begin              if ItemID=MyShotID then begin                ShotOID:=ItemOID;                ColvoShot:=ItemCount;                EditFShotVal.Text:=inttostr(ItemCount);              end;            end;            1060..1061: begin              if ItemID=MyHPID then begin                HPOID:=ItemOID;                ColvoHP:=ItemCount;                EditHPotionVal.Text:=inttostr(ItemCount);              end;            end;          end; /////////////////////////////////////////////////////////////////////////////////////////       end;     end;   end; end; //...................................... //****************************************************************************** function SumItem(Item: integer):integer; var   sum, i : integer; begin   result:=0;   //находим подходящий предмет по ItemID   for i:=1 to maxitems 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; //...................................... //****************************************************************************** function FindItem(item:integer) : integer; //находим в инвентаре все предметы с ItemID var   i, j : integer; begin   for i:=1 to maxitems do begin     //очищаем масив     ItemBase2[1,i]:=0;     ItemBase2[2,i]:=0;     ItemBase2[3,i]:=0;     ItemBase2[4,i]:=0;   end;   ColvoItm2:=0;   j:=1;   for i:=1 to maxitems do begin     //находим подходящий предмет     if (ItemBase[2,i]=item) then begin       //Say('i='+inttostr(i)+' ItemBase[1,i]='+IntToStr(ItemBase[1,i])+' ItemBase[2,i]='+IntToStr(ItemBase[2,i])+' ItemBase[3,i]='+IntToStr(ItemBase[3,i]));       ItemBase2[1,j]:=ItemBase[1,i];       ItemBase2[2,j]:=ItemBase[2,i];       ItemBase2[3,j]:=ItemBase[3,i];       ItemBase2[4,j]:=ItemBase[4,i];       ColvoItm2:=ColvoItm2+ItemBase[3,i];       inc(j);     end;   end;   result:=colvoitm2; //  msg.Lines.Add('ColvoItm2='+IntToStr(Colvoitm2)); end; //...................................... //*************************************************************** procedure AppendNpc(OID, ID : integer); //добавляем в базу данных мобов с коррекцией расстояния до них var   i: integer;   ispovtor:boolean; begin   isPovtor:=false;   for i:=1 to maxnpc do begin     //если нашли в базе, то коректируем его координаты на новые     if (NpcBase[1,i]=OID) and (MyOID<>OID) then begin       NpcBase[2,i]:=ID-kID; //ID       isPovtor:=true;       //msg.Lines.Add('Корректируем координаты Npc '+IntToStr(i)+' OID:'+IntToStr(NpcBase[1,i])+' ID:'+IntToStr(NpcBase[2,i]));       //msg.Lines.Add('KolvoNpc='+inttostr(kolvonpc));     end;   end;   if not isPovtor then   begin //иначе, перебираем базу, ищем свободную ячейку в ней и добавляем нового     for i:=1 to maxnpc do begin       if (NpcBase[1,i]=0) and (MyOID<>OID) then begin         //запоминаем моба в свободную ячейку         NpcBase[1,i]:=OID;  //OID         NpcBase[2,i]:=ID-kID;   //ID         inc(kolvonpc);         //добавляем имя Npc         //msg.Lines.Add('Вносим координаты Npc '+IntToStr(i)+' OID:'+IntToStr(NpcBase[1,i])+' ID:'+IntToStr(NpcBase[2,i]));         break;       end;     end;   end; end; //...................................... //*************************************************************** procedure DeleteNpc(OID : integer)//удаляем Npc var   i : integer; begin   for i:=1 to maxnpc do begin     //если нашли в базе, то удаляем его     if (NpcBase[1,i]=OID) then begin       //msg.Lines.Add('Удаляем '+inttostr(NpcBase[1,i])+' '+inttostr(NpcBase[2,i]));       NpcBase[1,i]:=0; //OID       NpcBase[2,i]:=0; //ID       dec(kolvonpc);       //msg.Lines.Add('Удаляем Npc'+' KolvoNpc='+inttostr(kolvonpc));       break;     end;   end; end; //...................................... //*************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //*************************************************************** begin     //****************************************************************************     //не обрабатываем пустые пакеты     if pck='' then exit;     //****************************************************************************     //проверка на готовность скрипта     if (MyOID<>0) and (LureOID<>0) and (RodOID<>0) and not status then begin       msg.Lines.Add('Скрипт инициализирован!');       status:=true;     end;     //****************************************************************************     //продажа состоит из следующих шагов:     //1. таргет  на продавце, пауза, снова таргет c04=Action, c04=Action     //2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)     //3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)     //4. приходит s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d(ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)     //5. FindItem(ID) найдем OID, Count нужной вещи по ID     //6. шлем c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectID)i(ItemID)d(Count)     //****************************************************************************     if ReadyToSell and (FishermanOID<>0) then begin       if (ConnectName=Name) and FromServer then begin         case pck[1] of           //после того, как мы взяли в таргет продавца приходит этот пакет (#$0F)           //s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)           #$19: begin///////////////////////////////////////////////////////////////////////////////////////////             msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');             if ReadD(2)=FishermanOID then begin               delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке               //шлем запрос выбора пункта - продажа               //c21=RequestBypassToServer:s(Cmd)               RequestByPassToServer(GetSellList);               msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');             end;           end;           //после выбора пункта - продажа, приходит этот пакет (#$10)           //s10=SellList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(Count)w(ItemType2)w(h)d(ItemBodyPart)w(EnchantLevel)w(h)w(h)d(refPrice)           #$06: begin/////////////////////////////////////////////////////////////////////////             delay(1000); //делаем небольшую паузу, чтобы пакеты шли в правильном порядке             msg.Lines.Add('S>Пакет SellList #$10');             ListID:=ReadD(6); //запоминаем, он все время разный             msg.Lines.Add('ListID='+inttostr(ListID));             //шлем запрос на продажу             //c1E=RequestSellItem:h(ListID)d(SellCount)h(ObjectID)i(ItemID)d(Count)             msg.Lines.Add('C>Пакет RequestSellItem #$1E');             //продадим первый из списка             msg.Lines.Add('FindItem: OID:'+IntToStr(ItemBase2[1,1])+' ID:'+IntToStr(ItemBase2[2,1])+' Count:'+IntToStr(ItemBase2[3,1]));             RequestSellItem(ItemBase2[1,1],ItemBase2[2,1],ItemBase2[3,1]);             ReadyToSell:=false; //закончили с предметом           end;         end;       end;     end;     //****************************************************************************     //покупка состоит из следующих шагов:     //1. таргет  на продавце, пауза, снова таргет c04=Action, c04=Action     //2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)     //3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)     //4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d(ItemBodyPart)     //5. FindItem(ID) найдем OID, Count нужной вещи по ID     //6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count)     //****************************************************************************     if ReadyToBuy and (FishermanOID<>0) then begin       if (ConnectName=Name) and FromServer then begin         case pck[1] of           //после того как мы взяли в таргет продавца приходит этот пакет           //s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)           #$19: begin///////////////////////////////////////////////////////////////////////////////////////             msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');             if ReadD(2)=FishermanOID then begin               //шлем запрос выбора пункта - продажа               //c21=RequestBypassToServer:s(Cmd)               delay(1000);               RequestByPassToServer(getbuylist);               msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');             end;           end;           //после выбора пункта - продажа, приходит этот пакет           //s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d(ItemBodyPart)           #$07: begin//////////////////////////////////////////////////////////////////////////////             msg.Lines.Add('S>Пакет BuyList #$11');             ListID:=ReadD(6); //запоминаем, он все время разный             msg.Lines.Add('ListID='+inttostr(ListID));             //шлем запрос на продажу             //1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count)             msg.Lines.Add('C>Пакет RequestBuyItem #$1F');             //продадим первый из списка             msg.Lines.Add('Item: ID:'+IntToStr(TradeBuyItem[Trd])+' Count:'+IntToStr(NeedBuy));             delay(1000);             RequestBuyItem(TradeBuyItem[Trd],NeedBuy);             ReadyToBuy:=false;           end;         end;       end;     end;     //****************************************************************************     //обмен состоит из следующих шагов:     //1. таргет  на продавце, пауза, снова таргет c04=Action, c04=Action     //2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)     //3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)     //4. приходит sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d(onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(itemcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iItemId)w(itype2)d(icount)w(ienchant)     //5. FindItem(ID) найдем OID, Count нужной вещи по ID     //6. шлем cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amount)     //****************************************************************************     if ReadyToMultiSell and (FishermanOID<>0) then begin       if (ConnectName=Name) and FromServer then begin         case pck[1] of           //после того как мы взяли в таргет продавца приходит этот пакет           //s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)           #$19: begin             msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');             if ReadD(2)=FishermanOID then begin               //шлем запрос выбора пункта - продажа               //c21=RequestBypassToServer:s(Cmd)               delay(1000);               RequestByPassToServer(getmultisell);               msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (multisell)');             end;           end;           //после выбора пункта - обмен, приходит этот пакет           //sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d(onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(itemcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iItemId)w(itype2)d(icount)w(ienchant)           #$D0: begin             msg.Lines.Add('S>Пакет MultiSellList #$D0');             ListID:=ReadD(2); //запоминаем, он все время разный             msg.Lines.Add('ListID='+inttostr(ListID));             //шлем запрос на обмен             //cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amount)             msg.Lines.Add('C>Пакет RequestMultiSellChoose #$A7(ListId:'+IntToStr(ListId)+' EntryId:'+IntToStr(Trd*2+1)+' Count:'+IntToStr(ItemBase2[3,1])+')');             delay(1000);             //в java -> EntryId * k=100000             RequestMultiSellItem(ListId,Trd*2+1,ItemBase2[3,1]);             ReadyToMultiSell:=false;           end;         end;       end;     end;   //****************************************************************************   if (ConnectName=Name) and FromServer then begin     case pck[1] of       //***************************************************************       #$2F: begin      // MoveBackwardToLocation////////////////////////////////////////////////////////////               if ReadD(2) = MyOID then begin                 MyX := ReadD(18);                 MyY := ReadD(22);                 MyZ := ReadD(26);               end;             end;       //***************************************************************       #$32: begin //пакет с инфой о моём чаре/////////////////////////////////////////////////////////////           //msg.Lines.Add('S>Пакет UserInfo #$04');           UserInfo;       end;       //***************************************************************       //05=Attack:d(AttackerID)h(targetID)d(Damage)b(Flags)d(X)d(Y)d(Z)d(ListHits)h(targetID)d(damage)b(flags)       #$33: begin             msg.Lines.Add('S>Пакет Attack #$05');             if (MyOID=ReadD(6)) and (MyOID<>ReadD(2)) then begin               fishin.enabled:=false;               isFishing:=false; //сейчас не ловим               if MoveToPathEnabled then  MoveTimer.Enabled:=false; //если бежали, то остановимся               if not underattack then begin                 AttackerOID:=ReadD(2);                 msg.Lines.Add('На нас напали! ObjectID='+IntToStr(AttackerOID));                 if WeaponUse1 and not isEquip(MyWeaponID) then begin                   if ShieldUse1 and not isEquip(MyShieldID) then giveshield;                   giveweapon;                 end;                 TargetAttacker(AttackerOID);                 underattack:=true;                   inc(mob1);               end;             end;       end;       //***************************************************************       //пакет Die (моб умер)       //06=Die:h(CharID)d(d)d(HAsHideout)d(HasCastle)d(flags)d(sweepable)d(access)       #$00: begin////////////////////////////////////////////////////////////////////            msg.Lines.Add('S>Пакет Die #$06 ObjectID='+IntToStr(ReadD(2)));            if (AttackerOID=ReadD(2)) then begin               pbTargetHP.min:=0;               msg.Lines.Add('Убили моба ObjectID='+IntToStr(AttackerOID)+' в '+TimeToStr(time));               isDie:=true; //мы убили моба               if MoveToPathEnabled then  MoveTimer.Enabled:=True; //если бежали, то продолжим путь               underattack:=false;               if not isEquip(MyRodID) then giverod;               if not isEquip(MyLureID) then givelure;               //репозиция               fishin.enabled:=false;               isFishing:=false; //сейчас не ловим               case MestoLovli of                 1: begin cmd:='fishing'; Reposition1; end;                 2: begin cmd:='fishing'; Reposition2; end;                 3: begin cmd:='fishing'; Reposition3; end;               end;               msg.Lines.Add('Репозиция на месте рыбалки после боя с мобом...');            end;            if (MyOID=ReadD(2)) then begin               msg.Lines.Add('Нас убили в '+TimeToStr(time));               underattack:=false;               inc(death1);               fishin.enabled:=false;               isFishing:=false; //сейчас не ловим               RequestRestartPoint; //оживаем после смерти в городе            end;       end;       //***************************************************************       #$01: begin //пакет Revive           msg.Lines.Add('S>Пакет Revive #$07');           if (MyOID=ReadD(2)) then begin             cmd:='death'; AfterDeath;           end;       end;       //***************************************************************       //0C=DropItem:h(PlayerID)h(ObjectID)i(ItemID)d(X)d(Y)d(Z)d(Stackable)d(Count)d(d)       #$16: begin           msg.Lines.Add('S>Пакет DropItem #$0C');           if (AttackerOID=ReadD(2)) then begin //дроп только с наших мобов             if (delta(MyX, MyY, ReadD(14), ReadD(18))<=200) then begin               //по ItemID здесь можно отсеивать ненужные предметы               //if ReadD(10)=57 then exit;           //не поднимать адену               //msg.Lines.Add('Выпала вещь!!!');               fishin.enabled:=false;               isFishing:=false; //сейчас не ловим               Target(ReadD(6));               msg.Lines.Add(' Пробую поднять дроп!!!');               delay(1000);               fishin.enabled:=true;             end;           end;       end;       //***************************************************************       #$18: begin////////////////////////////////////////////////////////////////////////////           //msg.Lines.Add('S>Пакет StatusUpdate #$0E');           if (MyOID=ReadD(2)) then StatusUpdate; //обновление информации о хп           if (AttackerOID=ReadD(2)) then TargetStatusUpdate; //обновление информации о хп       end;       //***************************************************************       //12=DeleteObject:d(ObjectID)d(d)       #$08: begin///////////////////////////////////////////////////////////////////////////////         msg.Lines.Add('S>C $12 DeleteObject '+inttostr(ReadD(2)));         DeleteNpc(ReadD(2)); //        if (AttackerOID=ReadD(2)) and not isDie then begin         if (AttackerOID=ReadD(2)) then begin           pbTargetHP.min:=0;           msg.Lines.Add('Исчез напавший на нас ObjectID='+IntToStr(AttackerOID)+' в '+TimeToStr(time));           if MoveToPathEnabled then  MoveTimer.Enabled:=True; //если бежали, то продолжим путь           underattack:=false;           if not isEquip(MyRodID) then giverod;           if not isEquip(MyLureID) then givelure;           //репозиция           fishin.enabled:=false;           isFishing:=false; //сейчас не ловим           case MestoLovli of             1: begin cmd:='fishing'; Reposition1; end;             2: begin cmd:='fishing'; Reposition2; end;             3: begin cmd:='fishing'; Reposition3; end;           end;           msg.Lines.Add('Репозиция на месте рыбалки после боя с мобом...');           isDie:=false; //мы убили моба         end;       end;       //***************************************************************       //16=NpcInfo:d(ObjectID)d(NpcTypeID)d(IsAttackable)d(X)d(Y)d(Z)d(Heading)       //d(d)d(Maspd)d(Paspd)d(runSpd)d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRSpd)       //d(flWSpd)d(FlyRSpd)d(FlyWSpd)f(ProperMul)f(Paspd)f(CollisRadius)       //f(CollisHeight)d(RHand)d(d)d(LHand)b(nameabove)b(isRun)b(isInFight)       //b(isAlikeDead)b(isSummoned)s(Name)s(Title)d(d)d(d)d(karma)d(abnEffect)       //d(d)d(d)d(d)d(d)b(c)b(Team)f(collisRadius)f(collisHeight)d(d)       #$0C: begin//////////////////////////////////////////////////////////////////////         msg.Lines.Add('S>Пакет NpcInfo #$16'+inttostr(ReadD(2)));         //        OID       ID         AppendNpc(ReadD(2), ReadD(6)); //добавляем в базу данных         if (FishermanID=ReadD(6)-kID) then begin           EditFishermanOID.text:=inttostr(ReadD(2));           FishermanOID:=strtoint(EditFishermanOID.text);           if java then begin             //java             getbuylist:='npc_'+inttostr(FishermanOID)+'_Buy 411';             getselllist:='npc_'+inttostr(FishermanOID)+'_Sell';             getmultisell:='npc_'+inttostr(FishermanOID)+'_multisell 009';           end;         end;       end;       //***************************************************************       //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(--)       #$11: begin//////////////////////////////////////////////////////////////////////         //msg.Lines.Add('S>Пакет ItemListPacket #$1B');         CreateItemBase; //создание базы предметов       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)       #$21: begin     // 41(42) для IL, 32(34) для С4///////////////////////////////////////////////////////////////////////         //msg.Lines.Add('S>Пакет InventoryUpdate #$27');         UpdateItemBase; //Обновление базы       end;       //***************************************************************       #$62: begin//////////////////////////////////////////////////////////////////////////////////////////////////         //msg.Lines.Add('S>Пакет Messages #$64');         if (pck[2]+pck[3]=#$85#$06) then inc(failed1);            //ничего не нашли в рыбе         if (pck[2]+pck[3]=#$35#$00) then inc(lucky1);//lucky1:=fish1-failed1;  //удачно вскрыли         if (pck[2]+pck[3]=#$B1#$05) then begin  //You can't fish here           //репозиция           fishin.enabled:=false;           isFishing:=false; //сейчас не ловим           CanFishHere:=false; //можно тут ловить?           msg.Lines.Add('Здесь нельзя ловить...');           case MestoLovli of             1: begin cmd:='fishing'; Reposition1; end;             2: begin cmd:='fishing'; Reposition2; end;             3: begin cmd:='fishing'; Reposition3; end;           end;         end;       end;       //***************************************************************       //ловим рыбу       //FE1300=ExFishingStart:h(charOID)d(fishType)d(X)d(Y)d(Z)b(isNightLure)b(c)       //FE1400=ExFishingEnd:h(charObjtId)b(isWin)       //FE1500=ExFishingStartCombat:h(charOID)d(time)d(HP)b(Fighting)b(LureType)b(isFishDeceptive)       //FE1600=ExFishingHpRegen:h(charOID)d(time)d(fish_HP)b(HPstop/rise)b(GoodUse)b(anim)d(penalty)b(BarColor)       #$FE: begin         if Status and (MyOID<>0) then begin           case pck[2] of             //FE1400=ExFishingEnd:h(charObjtId)b(isWin)             #$1F: begin/////////////////////////////////////////////////////////////////////////////////               //msg.Lines.Add('S>Пакет ExFishingEnd #$FE1400');               isFishing:=false; //сейчас не ловим               if MyOID=ReadD(4) then begin                 if ReadC(8)=1 then begin                   inc(fish1); //счетчик пойманых                   msg.Lines.Add('Поймали!');                   //MMesto:=0;  //сбрасываем готовность смены места                 end else begin                   if stop then exit; //нажали кнопку стоп!                   inc(fish2); //счетчик потеряных                   msg.Lines.Add('Сорвалась!');                   inc (MMesto)//не пора ли поменять место ловли?                   if (MMesto=PMMesto) then begin                     MMesto:=0//сбрасываем готовность смены места                     inc(MestoLovli);                     if (MestoLovli>3) then MestoLovli:=1;                     fishin.enabled:=false;                     case MestoLovli of                       1: begin cmd:='fishing'; MenayemMesto1; end;                       2: begin cmd:='fishing'; MenayemMesto2; end;                       3: begin cmd:='fishing'; MenayemMesto3; end;                     end;                     //moveto1.enabled:=true;                     msg.Lines.Add('Бежим на новое место...');                     exit;                   end;                 end;                 fishin.enabled:=true;               end;             end;             //FE1600=ExFishingHpRegen:h(charOID)d(time)d(fish_HP)b(HPstop/rise)b(GoodUse)b(anim)d(penalty)b(BarColor)             #$28: begin///////////////////////////////////////////////////////////////////////////////////////////               //msg.Lines.Add('S>Пакет ExFishingHpRegen #$FE1600');               if MyOID=ReadD(4) then begin                 if (pck[16]+pck[18]=#$00#$00) then begin                   pumping;                   //msg.Lines.Add('Pumping!');                 end; // else if (pck[16]+pck[17]=#$01#$01) then msg.Lines.Add('Pumping прошёл!');                 if (pck[16]+pck[18]=#$01#$00) then begin                   reeling;                   //msg.Lines.Add('Reeling!');                 end; // else if (pck[16]+pck[17]=#$01#$01) then msg.Lines.Add('Reeling прошёл!');               end;             end;           end;         end;       end;       {#$D3: begin // D3=NetPing:d(kID) на Нетпинг сервера шлем сохранённый пакет Нетпинга от клиента         msg.Lines.Add('S>Пакет NetPing #$D3');         if LogOutOk then begin           buf:=NetPing;           SendToServerEx(Name);           msg.Lines.Add('C>Пакет NetPing #$A8');         end;       end;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////     end;   end;   //****************************************************************************   if (ConnectName=Name) and FromClient then begin     case pck[1] of       {#$00: begin //C>09=LogoutRequest - выходим ручками из клиента////////////////////////////////////////////////////////         msg.Lines.Add('S>Пакет LogoutRequest #$09');         // вроде не надо тут их ставить?         NoFreeOnClientDisconnect;         NoFreeOnServerDisconnect;         pck:='';         // шлем s7E=LogOutOk, для отключения клиента         msg.Lines.Add('S>Пакет LogOutOk #$7E');         buf:=#$7E;         SendToClientEx(Name);         LogOutOk:=true;       end;       #$A8: begin        // C>A8=NetPing:d(kID)d(PING)d(dta)         msg.Lines.Add('C>Пакет NetPing #$A8');         NetPing:=pck; // запомним его         pck:='';       end;}       #$0F: ParseMoveClient;  //move//////////////////////////////////////////////////////////////////       #$49: //say2///////////////////////////////////////////////////////////////////////////////////////////////////////         //если это команда и она обработана и надо очистить чат         if ParseCmd(ReadS(2)) and EraseCommandFromChat then pck:='';//kill packet         //ValidatePosition пакет от клиента с моими кординатами       #$59: begin         //msg.Lines.Add('C>Пакет ValidatePosition #$48');         MyX:=ReadD(2); //получаю координату х моего чара         MyY:=ReadD(6); //получаю координату у моего чара         MyZ:=ReadD(10); //получаю координату z моего чара       end;       {#$1B: begin         msg.Lines.Add('C>Пакет RequestSicialAction #$1B');         case ReadD(2) of           //социальное действие Yes для начала ловли           6: begin             msg.Lines.Add('Отключили клиент из скрипта...');             //для версии 3.1.9+ можно попробовать отключить клиента             //Варнинг! Опасно для жизни! =)             NoFreeOnClientDisconnect;             NoFreeOnServerDisconnect;             LogOutOk:=true;             buf:=#$7E;             SendToClientEx(Name); // отключаем клиент             msg.Lines.Add('S>Пакет LogOutOk #$7E');             //не передаем серверу социальное действие             pck:='';           end;         end;       end;}     end; //case   end; end.

Последний раз редактировалось APXAHGEJI, 03.10.2008 в 23:05.
APXAHGEJI вне форума   Ответить с цитированием
За это сообщение APXAHGEJI нажился спасибкой от:
Старый 07.10.2008, 18:40   #33
Заблокирован
 
Регистрация: 01.10.2007
Сообщений: 76
Сказал Спасибо: 22
Имеет 7 спасибок в 7 сообщенях
Murdoc
По умолчанию

Цитата:
Сообщение от APXAHGEJI Посмотреть сообщение
Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.
Спасибо за скрипт! Как раз начал сам переделывать, дошел до середины, а тут такой подарок
Еще вопрос. Вобщем скрипт у меня работает не с клиентом л2, а с чем то типа бота. Этот бот может заходить на серв, слегка бегать, ну и, главное, показывает чаты. Вот отсюда вытекает и вопрос:
что нужно резать, чтоб эти чаты не забивались фигней типа
16:37] Вы использовали Fishing Shot: D-grade
[16:37] Use 1314
[16:37] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы получили Small Blue Treasure Chest
[16:38] Use 1312
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы получили Small Blue Ugly Fish
[16:38] Use 1312

какие пакеты нужно вырезать чтоб клиент этого не видел? Заранее благодарю
Murdoc вне форума   Ответить с цитированием
Старый 08.10.2008, 17:35   #34
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от APXAHGEJI Посмотреть сообщение
Вот попробуй этот, на моем ХБэшном серве работает.
Единственно что, не переделал отключение клиента.
Скрипт не универсален, то есть работает тока под ХБ.
Что есть ХБ ? Хлопчатобумажный ?
  Ответить с цитированием
Старый 09.10.2008, 00:13   #35
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

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


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

В новой версии L2phx начиная с 3.4.0 надо в скрипте заменить SendMsg на SendMsgR везде нажав "ctrl+F" и воспользовались фичей найти и заменить всё спс NLObP за эту кульную функцию
Grinch вне форума   Ответить с цитированием
Старый 11.10.2008, 14:14   #37
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от Grinch Посмотреть сообщение
В новой версии L2phx начиная с 3.4.0 надо в скрипте заменить SendMsg на SendMsgR везде нажав "ctrl+F" и воспользовались фичей найти и заменить всё спс NLObP за эту кульную функцию
Есть ещё "ctrl+R" - замена.
Ещё, можно просто убрать процедуру SendMSG из скрипта и тогда вывод лога будет идти в пакетхак.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 14.10.2008, 12:35   #38
Заблокирован
 
Регистрация: 01.10.2007
Сообщений: 76
Сказал Спасибо: 22
Имеет 7 спасибок в 7 сообщенях
Murdoc
По умолчанию

Цитата:
Сообщение от Murdoc Посмотреть сообщение
Еще вопрос. Вобщем скрипт у меня работает не с клиентом л2, а с чем то типа бота. Этот бот может заходить на серв, слегка бегать, ну и, главное, показывает чаты. Вот отсюда вытекает и вопрос:
что нужно резать, чтоб эти чаты не забивались фигней типа
16:37] Вы использовали Fishing Shot: D-grade
[16:37] Use 1314
[16:37] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы использовали Fishing Shot: D-grade
[16:38] Use 1314
[16:38] Вы получили Small Blue Treasure Chest

какие пакеты нужно вырезать чтоб клиент этого не видел? Заранее благодарю
Сам спросил и сам отвечу
вобщем надо вырезать пакеты от серва : Tип: 0x62 (SystemMessage)
Скрипт простейший:
begin
if FromServer then begin
if pck[1]=#$62 then begin
SendMsg('SysMess');
pck := '';
end;
end;
правда кроме ненужных сообщений вырезаются и все остальные
Murdoc вне форума   Ответить с цитированием
Старый 14.10.2008, 19:23   #39
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

строчку по длиннее проверяй, тогда будет то, что надо.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 18.10.2008, 05:37   #40
Новичок
 
Регистрация: 18.10.2008
Сообщений: 9
Сказал Спасибо: 6
Имеет 1 спасибку в 1 сообщении
Acdsee пока неопределено
По умолчанию

При запуске скрипта вылетает ошибка
Access violation at address 0056BECC in module 'l2pbx.exe'. Read of address 00000000.
После чего соединение с сервером рвется, и линейку приходится рубить из процессов.
Пробовал на l2phx.3.4.1.48 и l2phx.3.4.1.45
Играю на шоках.
Объясните пожалуйста что я делаю не так?
П.Сы. При запуске скрипта на точку происходит тоже самое.
Acdsee вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Жесткий скриптинг



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

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


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

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

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