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

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

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

Автоматизация заточки предметов до необходимого уровня by NLObP

Возможности скрипта
--------------------
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим. Один предмет всегда остаётся.

Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false

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


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

by NLObP
для С4 и Интерлюдии можно взять здесь
для Грации можно взять здесь

by Breadfan
скрипт переделанный под камаель (с автопокупкой).

by Shadow
Скрипт заточки предметов с их закупкой при необходимости

Этот скрипт помогает в рутине, когда разрешено пользователям 100% точить до большой величины, скажем до +200, ручками то замучаешься точить.

PS: скрипты - это облегчение рутинной работы человека.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 14756
Размер:	24.8 Кб
ID:	39  
Вложения
Тип файла: rar breadfan_enchant.rar (5.9 Кб, 4222 просмотров)
Тип файла: rar credo_enchant.rar (2.7 Кб, 2341 просмотров)
Тип файла: zip enchant_by_NLObP_01.zip (7.4 Кб, 2858 просмотров)
Тип файла: zip enchant_by_NLObP_02.zip (71.6 Кб, 1450 просмотров)
Тип файла: zip enchant_by_NLObP_03.zip (71.8 Кб, 1257 просмотров)
Тип файла: zip enchant_by_NLObP_04.zip (73.3 Кб, 1586 просмотров)
Тип файла: zip enchant_by_NLObP_06.zip (9.4 Кб, 1257 просмотров)
Тип файла: zip enchant_by_NLObP_07.zip (9.4 Кб, 1567 просмотров)
Тип файла: rar enchant_by_NLObP_08.rar (6.3 Кб, 1852 просмотров)
Тип файла: rar enchant_by_NLObP_09.rar (6.3 Кб, 5533 просмотров)
Тип файла: rar shadow_enchant.rar (9.6 Кб, 3666 просмотров)

Последний раз редактировалось NLObP, 31.08.2009 в 01:20.
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 114 спасибками от:
4erteg, 4iter, 8tomat8, abyabar, Agat, Alan, AlexStar, Alta1r, AoWpwnz, aSeSSoR, BEJIEC, bestar, BimSkaLaBim, BioDread, BOTt, Breadfan, BuKbI4, C0derxWarr1or, cadaver, catchy, ChiterEPT, coffee, Comedylife, CriticalError, Crypto, Dagon, DarthShelL, DARTY, David, DeadForz, dfackk, dmitrix, Doberman, dyh9l, dynda2000, eGoIST, Elfinit, ERASE, esk71, Fer123, Fvbkm, Ga6pueL, GanGsta0, GANsss, givemexxx, Gray314, Green, Grinch, Gurg, HooleeCheeter, Hwoarang, idkfa, Imperial2008, Irritant, iSee, jiroo, KPOT^^, KrasX, LamerOK, LeroI, leto, Leviy, lodek, LostQ, LoveCoderX, lPomalSveNl, maxstro, Meth0d, micoach, MONDBLITZ, Necrolity, Nerevar, Niksan, nneett, Op4er, Paulo, Pinko, Piter, Pitkin, Porcupine, Porshesh, Random-al, ReaGeN, ReiN, Ribnadzor, RinZo, RODMAN91, rubela, saidbek, SELLER, Sergey, SexGuru, Shadow, Siberia, skaner, someonce1, Source, TAMBIK, Tanuxa, tiranosaur, Tos, Tzio 7, vahes, VanTG, VasQ, winer, WOLf!, Xelat, YssurTiger, zotrussia, Виталий, Витя, Р0ма, ®ennie™
Старый 07.08.2008, 17:35   #31
Новичок
 
Аватар для Shadow
 
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow пока неопределено
По умолчанию

Использовал функцию проверки итемов для подсчета денег. Приспособил для вывода окошко Stats. Теперь впринципе можно когда кончаются деньги обменивать их у кота. И опять все дело в таргете.
2 NLObP
В каком месте скрипта правильно всетаки поставить закупку заточек?
И еще, как лучше сделать вызов процедуры на закупку, чтобы из переменных подставлялись значения итема, чтобы оперативно изменять что покупать. Типа - Закупка(СкроллЫ);
а в СкроллЫ(СкроллА,Б,С) прописано listID, EntryId и Count этих свитков? А то я второй день в этих скриптах ковыряюсь, уже голова набекрень =)

Подсчет аден:
delphi Код:
var   Item, scrl:integer;   ItemBase:  array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl   Adena, CoL: integer; //-------------------       //изменен       2: begin          for i:=1 to max do begin            if ItemBase[1,i]=ItemOID then begin              ItemBase[3,i]:=ItemCount;              ItemBase[4,i]:=Itemlvl;              msg.Lines.Add('Изменяем параметры предмета!');              msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));              if i=13 then begin                Adena:=ItemBase[3,i];                stats.Lines.Add('Адены '+IntToStr(Adena));              end;              if i=25 then begin                CoL:=ItemBase[3,i];                stats.Lines.Add('Coin of Luck '+IntToStr(CoL));              end;            end;          end;       end;
__________________
Shadows anywhere...
Shadow вне форума   Ответить с цитированием
Старый 07.08.2008, 17:49   #32
Новичок
 
Аватар для Shadow
 
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow пока неопределено
Сообщение

Цитата:
Сообщение от NLObP Посмотреть сообщение
Для таргета нужно знать ObjectId продавцов. Вот их отловить и есть небольшая проблема. В рыбалке есть, как отлавливать фишерманов.

delphi Код:
//*************************************************************** //04=Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ShiftFlag) procedure Target(Attacker: Integer); begin   buf:=#$04;   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; //......................................  
Смотрел пакеты, ОбджектИД и координаты продавцов известны. Выше в куске скрипта в процедуре Roy. Что за переменные MyX, и тд? Я так понимаю это координаты моего чара. Что за переменная Attacker, откуда она берется?
__________________
Shadows anywhere...
Shadow вне форума   Ответить с цитированием
Старый 07.08.2008, 18:21   #33
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от Shadow Посмотреть сообщение
Смотрел пакеты, ОбджектИД и координаты продавцов известны. Выше в куске скрипта в процедуре Roy. Что за переменные MyX, и тд? Я так понимаю это координаты моего чара. Что за переменная Attacker, откуда она берется?
MyX,MyY,MyZ - координаты чара. Сервер проверяет расстояние и если ты далеко, то отвергает запрос.
Attacker - ObjectId. Осталось так исторически из скриптов бота. Поменял в выше отписанном сообщении.

Добавлено через 13 минут
Цитата:
Сообщение от Shadow Посмотреть сообщение
В каком месте скрипта правильно всетаки поставить закупку заточек?
И еще, как лучше сделать вызов процедуры на закупку, чтобы из переменных подставлялись значения итема, чтобы оперативно изменять что покупать. Типа - Закупка(СкроллЫ);
а в СкроллЫ(СкроллА,Б,С) прописано listID, EntryId и Count этих свитков? А то я второй день в этих скриптах ковыряюсь, уже голова набекрень =)
delphi Код:
//*************************************************************** //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:=#$1E;     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:=#$1F;     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:=#$A7;     WriteD(ListID);     WriteD(EntryId);     WriteD(Count);     SendToServerEx(Name);   end; end; //...................................... procedure OnTimer(Sender: TObject); begin   EditItemVal.text:=inttostr(sumitem(ItemID));   EditScrollVal.text:=inttostr(sumitem(ScrollID));   if (CurEnchLvl>=strtoint(Edit1.Text)) then begin     msg.Lines.Add('Нечего точить! Прервано!');     timer.enabled:=false;     exit;   end;   if (sumitem(ItemID)<=1) then begin //  if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь     msg.Lines.Add('Прервано!');     timer.enabled:=false;     exit;   end;   ScrollOID:=GetItem(ScrollID,0);   if ScrollOID=0 then begin     msg.Lines.Add('Нет заточки! Прервано!');     timer.enabled:=false;     exit;   end;   UseItem(ScrollOID);   msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));   ready:=true; //готовы затачивать end; //......................................  

В процедуре OnTimer вместо прерывания работы вставь вызовы процедур закупки. Потом снова таймер запускай, для продолжения заточки.


PS: Вы свои скрипты сюда выкладывайте, когда отладите. Я их в первый пост выложу.

Последний раз редактировалось NLObP, 07.08.2008 в 18:21. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 2 спасибками от:
Старый 07.08.2008, 18:54   #34
Новичок
 
Аватар для Shadow
 
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow пока неопределено
По умолчанию

Что я имел ввиду по поводу закупки.
У нас есть процедура на закупку RequestMultiSellItem(ListId,EntryID,Count:integer) ;
Далее есть база переменных, в которых прописано:
скролл А арм имеет листид=... еид=... каунт=...
И я типа пишу процедуру BuyItems(ScrollA);
и там как-то нада подставить значения скролла А. и вызвать рекуестмультиселл с этими значениями.
А в идеале мы создаем базу итемИД в которой данные по листИД и тд на итемы. Потом получаем значение итемИД из чекбокса используемых заточек и шмоток, ищем в базе, подставляем в мультиселл и покупаем именно их. Тоесть не нужно в ручную прописывать значения заточек которые используются в данный момент.
__________________
Shadows anywhere...
Shadow вне форума   Ответить с цитированием
Старый 08.08.2008, 20:09   #35
Новичок
 
Аватар для Shadow
 
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow пока неопределено
Лампочка

Изменил способ покупки, как мне кажется элегантно получилось, но в задумках еще лучше =) Хочу брать ItemID из той переменной что в комбобокс подставляется. Тоесть какой вид заточек мы выбрали, такой он и будет закупать.
delphi Код:
{ EntryID, вид, цена - для моего серва 1 Weapon D  - 50 000 3 Armor D   - 6 000 5 Weapon C  - 110 000 7 Armor C   - 15 000 9 Weapon B  - 500 000 11 Armor B  - 80 000 13 Weapon A - 5 000 000 15 Armor A  - 500 000 17 Weapon S - 10 000 000 19 Armor S  - 1 000 000 21 Bless Weapon D - 500 000 23 Bless Armor D  - 60 000 25 Bless Weapon C - 2 000 000 27 Bless Armor C  - 300 000 29 Bless Weapon B - 5 000 000 31 Bless Armor B  - 800 000 33 Bless Weapon A - 50 000 000 35 Bless Armor A  - 5 000 000 37 Bless Weapon S - 100 000 000 39 Bless Armor S  - 10 000 000 } procedure BuyScroll(BuyEntryID, BuyDelay: integer); begin    delay(BuyDelay);    RequestMultiSellItem(559, BuyEntryID, 1);    delay(BuyDelay); end; //******************************************************     #$6F: if ready then begin //and (readd(2)=itemid)       //ищем подходящий предмет для заточки       timer.enabled:=false; //отключаем пока не найдем предмет для заточки       repeat         ItemOID:=GetItem(ItemID,CurEnchLvl);         if ItemOID=0 then begin           inc(CurEnchLvl);           Edit2.text:=inttostr(CurEnchLvl);         end;       until ItemOID<>0;       //************************************************       msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(ItemID)+' ItemOID='+IntToStr(ItemOID));       RequestEnchantItem(ItemOID);       ready:=false; //***** Закупка заточек *       BuyScroll(31, 150); //***********************       timer.enabled:=true; //пока в тесте отключаем (вкл. после заточки предмета)     end;     #$81: if readd(2)=0 then begin           CurEnchLvl:=0; //начнем с начала  
Так он стабильнее покупает заточки. Например можно закупить 2, и он будет 1 использовать, и сразу покупать другую. А вторая нужна прозапас, тк иногда из-за лагов он использует, но не покупает.
2 NLObP
Таргет так и не прикрутил... у меня аж ПХ вылетает. Откуда брать ItemID заточки которая в боксе выводится? Хочу создать файл с базой ListID и EntryID заточек. И брать значения по их ItemID.
Как проверить сколько свободных слотов в инвентаре? Это чтобы закупать выбранную шмотку под завязку, или можно сделать поле для ввода количества.
Кстати переделал подсчет денег:
delphi Код:
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID   for i:=1 to ListCount do begin     itemBase[1,i]:=ReadD(j);    //OID     itemBase[2,i]:=ReadD(j);   //ItemID     itemBase[3,i]:=ReadD(j)//кол-во     inc(j,10);     itemBase[4,i]:=ReadH(j);//EnchantLevel //    msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));     if interlude then inc(j,12) else inc(j,4);     //msg.Lines.Add('j='+inttostr(j));     if itemBase[2,i]=57 then begin       Adena:= itemBase[3,i];       stats.Lines.Add('Адены '+IntToStr(Adena));     end;     if itemBase[2,i]=4037 then begin       CoL:= itemBase[3,i];       stats.Lines.Add('Coin of Luck '+IntToStr(CoL));     end;   end;   //вносим изменения в чекбоксы  
В планах: расширить окно, добавить бокс для изменения задержек на покупку, да и общий для таймера например. Поставить чекбоксы: закупать заточки, закупать итемы, менять деньги. Но это потом, когда закупку нормально сделаю.

2 Все
Помогите сделать ТАРГЕТ!
__________________
Shadows anywhere...
Shadow вне форума   Ответить с цитированием
За это сообщение Shadow нажился спасибкой от:
Старый 08.08.2008, 20:53   #36
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от Shadow Посмотреть сообщение
Хочу брать ItemID из той переменной что в комбобокс подставляется. Тоесть какой вид заточек мы выбрали, такой он и будет закупать.
Я тоже так решил для закупки крючков. Оставлял одну вещь и шел покупать. Правда исходил из того, чтоб ObjectID новый не запоминать.

Цитата:
Сообщение от Shadow Посмотреть сообщение
Откуда брать ItemID заточки которая в боксе выводится? Хочу создать файл с базой ListID и EntryID заточек. И брать значения по их ItemID.
для скролла (где лежит := где берем)
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];

для вещи (где лежит := где берем)
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];

Добавлено через 1 минуту
Цитата:
Сообщение от Shadow Посмотреть сообщение
Как проверить сколько свободных слотов в инвентаре? Это чтобы закупать выбранную шмотку под завязку, или можно сделать поле для ввода количества.
Я за ранее ставил размер инвентаря чара в переменную
max=250; //количество слотов в инвентаре чара

Добавлено через 2 минуты
Цитата:
Сообщение от Shadow Посмотреть сообщение
Таргет так и не прикрутил... у меня аж ПХ вылетает.
Где именно проблема?

NpcId мы знаем. Вот по нему и надо отслеживать пакеты NPCInfo, где брать NpcObjectID. Уходишь подальше и возвращаешся назад, сервер шлет NpcInfo. Пользуешься таргетом.

Добавлено через 2 минуты
Цитата:
Сообщение от Shadow Посмотреть сообщение
В планах: расширить окно, добавить бокс для изменения задержек на покупку, да и общий для таймера например. Поставить чекбоксы: закупать заточки, закупать итемы, менять деньги. Но это потом, когда закупку нормально сделаю.
Успехов! Будет интересно посмотреть.

PS: а вещи ты покупать планируешь, или только заточки?

Последний раз редактировалось NLObP, 08.08.2008 в 20:53. Причина: Добавлено сообщение
NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился 2 спасибками от:
Старый 08.08.2008, 23:51   #37
Новичок
 
Аватар для Shadow
 
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow пока неопределено
Лампочка

Цитата:
Сообщение от NLObP Посмотреть сообщение
Я тоже так решил для закупки крючков. Оставлял одну вещь и шел покупать. Правда исходил из того, чтоб ObjectID новый не запоминать.
для скролла (где лежит := где берем)
ScrollOID:=ItemBase[1,ComboBoxScroll.ItemIndex+1];
ScrollID:=ItemBase[2,ComboBoxScroll.ItemIndex+1];

для вещи (где лежит := где берем)
ItemOID:=ItemBase[1,ComboBoxItem.ItemIndex+1];
ItemID:=ItemBase[2,ComboBoxItem.ItemIndex+1];

Я имею ввиду в каком месте скрипта это правильно сделать?

Я за ранее ставил размер инвентаря чара в переменную
max=250; //количество слотов в инвентаре чара

Общее нам известно. Как узнать сколько не занято? Чтобы потом поставить галку "закупать на полный инвентарь". Тоесть он оставляет место под 6 заточек, а в остальные слоты закупает шмотку.

Где именно проблема?
NpcId мы знаем. Вот по нему и надо отслеживать пакеты NPCInfo, где брать NpcObjectID. Уходишь подальше и возвращаешся назад, сервер шлет NpcInfo. Пользуешься таргетом.

Я использовал процедуры таргет, таргетаттакер, и юсеринфо... и короче ПХ вылетал с ошибкой. Как ловить пакет чтобы юзер инфо выдал координаты?

Успехов! Будет интересно посмотреть.
PS: а вещи ты покупать планируешь, или только заточки?

Стараюсь =) Конечно планирую. Вот как только с таргетом разберусь, смогу закупку прикрутить. Нада бы форму доделать под нее. Я окошки уже расширил, мсг, и статс, нада между ними всунуть чекбоксы, и выпадалки.
У меня уже есть скрипт на закупку, юзаю вручную через окно Дополнительно. Умеет закупать нужное количество по подставленным зачениям, 3 режима закупки - закупка+обмен денег, закупка, обмен.

Посмотри какой алгоритм я вижу на закупку заточек:
Выбираем заточку в главном окне. Там появляется значение ItemID, мы его записываем в другу переменную, например ChoosedScroll(если нада), а это например 730.
После заточки используем процедуру BuyScroll(ChoosedScroll);
Процедура BuyScroll(ChoosedScroll: integer);
В ней некая база. Возможно по такому принципу:
if ChoosedScroll 730 then ListID = 559, EntryID = 15
if ChoosedScroll 6757 then ListID = 559, EntryID = 35
и тд. подствяем их, и отправляем рекмультиселлитем(ListID, EntryID, 1);
end;
Вот что-то типа этого. Направление мыслей вообще правильное?
__________________
Shadows anywhere...
Shadow вне форума   Ответить с цитированием
Старый 09.08.2008, 00:23   #38
Новичок
 
Аватар для Shadow
 
Регистрация: 06.08.2008
Сообщений: 27
Сказал Спасибо: 8
Имеет 11 спасибок в 7 сообщенях
Shadow пока неопределено
Лампочка

Вот созрел извращенный вариант:
delphi Код:
procedure ScrollBase(ChosenScroll: integer, var BuyLID, BuyEID: integer, InBaseID: boolean); //Base if ChosenScroll=730 then begin   BuyLID:=559   BuyEID:=15   InBaseID:=true; end; if ChosenScroll=6757 then begin   BuyLID:=559   BuyEID:=35   InBaseID:=true; end; //тут не знаю как выдать если ничего не нашли... else     InBaseID:=false; end; procedure BuyItem(BuyLID, BuyEID, BuyDelay, ItemCount: integer); begin   for Cnt:=1 to ItemCount do begin   RequestMultiSellItem(BuyLID, BuyEID, 1);   delay(BuyDelay);   end; end; //..................................... код ............................................... EnchantItem; //запрос в базу перед покупкой ScrollBase(ChosenScroll, BuyLID, BuyEID, IDKnown);  if InBaseID BuyItem(BuyLID, BuyEID, BuyDelay, ItemCount) else типа пишем - не найден в базе  timer.enable:=false;
ChosenScroll, BuyDelay, Count соотвественно берутся из формы.
__________________
Shadows anywhere...
Shadow вне форума   Ответить с цитированием
Старый 09.08.2008, 02:35   #39
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

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

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

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

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

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


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

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

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


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

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

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