Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Помогите со скриптом на точку!

-

Общение и обсуждение, архив Lineage 2

- Cобытия, информация, вопросы и ответы по Lineage 2

Ответ
 
Опции темы
Старый 27.05.2011, 23:55   #1
 Разведчик
Аватар для nthjh25263214
 
nthjh25263214 никому не известный тип
Регистрация: 27.05.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Помогите со скриптом на точку!

У меня такая проблема.. Скрипт полностью работает кроме одной маленькой но... Действие точки не выполняется автоматически,тоесть каждый раз приходится нажимать соцц действие ДА чтобы предмет точился.. Как исправить чтобы 1 раз нажал и он автоматом точился скажем до 16 пока не заточит? может в скрипте чтото неправильно?


// Auto_enchant + 1 - gracia_epilogue_selectskroll
// хроники Грация ЭПИЛОГ
//===========================================
const
myname='ForWard'; //<<== пишем свой НИК

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

xxx=3;//<<== безопасный уровень заточки

chat = 3;// <<== какой ЧАТ выводить сообщения
// 3 - Party; 4 - Clan; 9 - Alli; 10 - anons ; 17 - Hero;
//==========================================
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один предмет чтоб запомнить чем и что точить
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
//----------------------------
// возможно использовать скрол до безопасного уровеня заточки
// выше использовать блесс скрол
// для этого заточить предмет один раз скрол и один раз блесс скрол
//----------------------------
// дальше скрипт сам точит до указаного уровня заточки
// все предметы ОДИНАКОВЫЕ с ПЕРВЫМ заточеным
// скрипт точит первый предмет до +1, потом второй до +1 и т.д
// если предмет при заточки блесс скрол слетел на 0 или на уровень как у вас на сервере
// то будет точиться он пока несравняется с остальными
// и т.д
// пока недостигнете заданого уровня заточки
// если предметов более одного : один предмет остается
// АВТОР ==>>>> TAMBIK
//==========================================
var
BaseItems:array[1..max,1..11] of integer;
Baselvl:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;

mytext:string;
autostart,start,autoMsg:Boolean;
flag : Boolean;
selectskrol,selectblessedskrol:Boolean;
autoselect:Boolean;
t,l,d,x,y,ii,i:integer;
ListSize,ItemEnch:word;
textID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID,skrolObject:integer;
itemID,objectOID:integer;
sumskroll,sumskrol,sumitemID,sumitem:integer;
maxlvl,minlvl,enchlvl,selectlvl:integer;
ID,skrolID,blessedskrolID:integer;
skrolOID,blessedskrolOID:integer;
index :integer;
//===========================================
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(chat);// <<=куда выводить сообщения
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' Установлен МАХ Уровень Заточки: '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
//==========================================
procedure ActionUse;
begin
case ReadD(2) of
12:begin autoMsg:=true; end;
13:begin autoMsg:=false; end;
24:begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if (maxlvl=0) then SendMsg2( ' Неуказан Уровень Заточки !' );
SendMsg2( '_______________________________' );
if autostart and (maxlvl>0) then begin
buf:=hstr('14');
SendToServerEx(myname);
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
end;
end;
25:begin
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopEnchantItem;// остановка скрипта
end;
end;
end;
//==========
procedure stopEnchantItem;// остановка скрипта
begin
autoMsg:=true;
start:=false;
deleteBase;
enchantID:=0;
ItemEnch:=0;
stopselectskrol;// отмена выбора скролл
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
deleteBase;
count:=0;
x:=0;
y:=0;
j:=4;
ListSize:=ReadH(j);
count:=round((Length(pck)-5) / ListSize);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j);
BaseItems[i,2]:=ReadD(j);//ObjectID
BaseItems[i,3]:=ReadD(j);//ItemID
BaseItems[i,4]:=ReadD(j);//LocationSlot
BaseItems[i,5]:=ReadD(j);// Amount:
BaseItems[i,6]:=ReadD(j);// Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x);
y:=count*x-(j-6);
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0;
if start then addenchantitemID;
skrolObject:=0;
sumskrol:=0;
sumskroll:=0;
minlvl:=Baselvl[1];
for ii:=2 to index do
if (Baselvl[ii] < minlvl) then
minlvl:=Baselvl[ii];// мин заточка
//------------------------------
if start and selectskrol and (selectblessedskrol=false) then enchantSkroll;
//------------------------------
if start and selectblessedskrol and (selectskrol=false) then enchantblessedskroll;
//------------------------------
if start and selectskrol and selectblessedskrol then enchantautoSelectSkroll;
end;
//=============================
procedure enchantSkroll;
begin
skrolObject:=skrolOID;
sumskrol:=Getitem(skrolID,3,5);//считаем SKROL
SendMsg2 (' SKROLL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if (sumskrol>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
if (sumskrol=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROLL........ ');
end;
end;
//=============================
procedure enchantblessedskroll;
begin
skrolObject:=blessedskrolOID;
sumskroll:=Getitem(blessedskrolID,3,5);//считаем blessedSKROL
SendMsg2 (' blessed. SKROLL ... c ID : '+IntToStr(blessedskrolID)+' = '+IntToStr(sumskroll)+' ШТ ');
if (sumskroll>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
if (sumskroll=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО blessed SKROLL........ ');
end;
end;
//=============================
procedure enchantautoSelectSkroll;
begin
SendMsg2(' .........' );
if (minlvl<xxx) then begin
skrolObject:=skrolOID;
sumskrol:=Getitem(skrolID,3,5);//считаем SKROL
SendMsg2 (' ___ БЕЗОПАСНО ___ ');
SendMsg2 (' применяем : ...Просто .. skroll. ');
if (sumskrol>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
SendMsg2 (' SKROLL .. c ID : '+IntToStr(skrolID)+' : = '+IntToStr(sumskrol)+' ШТ ');
if (sumskrol=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROLL........ ');
end;
end;
if (minlvl>=xxx) then begin
skrolObject:=blessedskrolOID;
sumskroll:=Getitem(blessedskrolID,3,5);//считаем blessedSKROL
SendMsg2 (' ___ О П А С Н О С Т Ь ___ ');
SendMsg2 (' применяем : ...blessed. ... skroll... ');
if (sumskroll>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
SendMsg2 (' blessed. SKROLL .. c ID : '+IntToStr(blessedskrolID)+' = '+IntToStr(sumskroll)+' ШТ ');
if (sumskroll=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО blessedSKROLL........ ');
end;
end;
end;
//=============================
procedure EnchantResult;
begin
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2] > 0) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
end;
end;
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0;
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0;
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=============================
// добавляем в базу ЛВЛ заточки
procedure addenchantitemID;
begin
for i:=1 to max do
if (BaseItems[i,3] = itemID) then begin
enchlvl:=BaseItems[i,11];
flag:=false;
for ii:=1 to max do
if (Baselvl[ii] = enchlvl) then begin // текущий уже есть в массиве,
flag := true;
BREAK; { прекращаем цикл }
end;
if (flag = false) then begin
for ii:=1 to max do
if (Baselvl[ii]=-1) then begin // добавим в массив,
Baselvl[ii]:=enchlvl;
index :=ii;
BREAK; { прекращаем цикл }
end;
end;
end;
end;
//==========================
procedure ChooseInventory;
var
OID, lvl:integer;
begin
if (itemID>0) and start then begin
sumitemID:=0;
sumitemID:=Getsumitem(itemID,3,5); // считаем предметы для заточки
SendMsg2(''+IntToStr(sumitem)+' Предметов для заточки с ID : '+IntToStr(itemID)+' = '+IntToStr(sumitemID)+' ШТ');
objectOID:=0;
SendMsg2( '*******************************************' );
SendMsg2(' ---- П О И С К П Р Е Д М Е Т А ----' );
if (sumitemID > sumitem) then objectOID:=GetObjectID(itemID);//находим по ItemID предмет с ObjectID
if (objectOID = 0) then begin
autoMsg:=true;
stopEnchantItem;// остановка скрипта
SendMsg2('Больше предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ');
SendMsg2('----' );
lvl:=0;
for i:=1 to max do
if (BaseItems[i,3] = itemID) then begin
OID:=BaseItems[i,2];
lvl:=BaseItems[i,11];
SendMsg2(' . . П р е д м е т . .' );
SendMsg2(' ID: '+IntToStr(itemID)+' ObjectID: '+IntToStr(OID)+' заточен до: '+IntToStr(lvl)+' ');
SendMsg2(' .................' );
end;
end;
end;
end;
//=========================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
ID,i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
if (itemID > 0) then begin
SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(itemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3] = itemID) and (BaseItems[i,11] = minlvl) and (BaseItems[i,11] < maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
SendMsg2(' ..... Найден Предмет для Заточки ..... ');
SendMsg2(' ID : '+IntToStr(itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+'');
SendMsg2('------------------------------' );
if start and (enchantID>0) then Timer02.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;// отмена выбора скролл
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObject);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
// Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
end;
//-----------------------------------------
procedure Init;
begin
minlvl:=0; maxlvl:=0; enchlvl:=0; ItemEnch:=0;
sumskrol:=0; sumitem:=0; sumitemID:=0;
objectOID:=0; enchantObjectID:=0;
enchantID:=0; skrolObjectID:=0;
itemID:=0;
ID:=0;skrolID:=0; blessedskrolID:=0;
skrolOID:=0; blessedskrolOID:=0;
skrolObject:=0;
t:=0;l:=0;d:=0;index:=0;

flag:=false;
autostart:=false;
start:=false;
autoMsg:=true;
selectskrol:=false;selectblessedskrol:=false;
autoselect:=false;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=1000; //<<== время выбора свитка

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

Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=2400; //<<== время между заточкой
SendMsg2( ' привет от TAMBIKa' );
SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предмет один раз ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2('В К Л сообщения соцдействие-приветствие\hello ' );
SendMsg2('ВЫКЛ сообщения соцдействие-победа\victory ' );
SendMsg2( '------------------------------------- ' );
deleteBase;
OpenInventory;//открыть инвентарь
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure OpenInventory;//открыть инвентарь.14=RequestItemList
begin
buf:=hstr('14');
SendToServerEx(myname);
end;
//=========================
procedure addtoskrolID;
begin
OpenInventory;//открыть инвентарь
SendMsg2(' ........ = UseItem = .........' );
skrolObjectID:=ReadD(2);
ID:=0;
ID:=Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
if (ID>0) then t:=1;
case ID of
6569..6578:begin
blessedskrolID:=ID;
blessedskrolOID:=skrolObjectID;
SendMsg2(' активирован Blessed SKROLL ID : '+IntToStr(blessedskrolID)+'');
selectblessedskrol:=true;
SendMsg2(' .................' );
end;
729..732,947..962:begin
skrolID:=ID;
skrolOID:=skrolObjectID;
SendMsg2(' активирован SKROLL ID : '+IntToStr(skrolID)+'');
selectskrol:=true;
SendMsg2(' .................' );
end;
end;
end;
//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$FE) and (pck[2]=#$81) and start then begin
Timer03.enabled:=true;
SendMsg2(' ..... Точим Предмет ..... ');
SendMsg2( ' ID : '+IntToStr(itemID)+' и ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+'' );
SendMsg2( '*******************************************' );end;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then begin Resultmaxlvl;end;
if FromClient and (pck[1]=#$56) then begin ActionUse; pck:='';exit;end;
begin
if (start=false) and FromClient then
case pck[1] of
#$19:addtoskrolID;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' выбор ________ предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
itemID:=0;
itemID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
if (itemID > 0) then autostart:=true;
SendMsg2 (' ID предмета : '+IntToStr(itemID)+' для заточки');
sumitem:=0;
sumitemID:=0;
sumitemID:=Getsumitem(itemID,3,5); // считаем предметы для заточки
if (sumitemID > 1) then sumitem:=1;
SendMsg2 (''+IntToStr(sumitem)+' Предметов для заточки с ID : '+IntToStr(itemID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2(' .................' );
stopselectskrol;
end;
end;
end;
end;
end.
  Ответить с цитированием
Старый 28.05.2011, 09:54   #2
 Сержант
Аватар для Denisovik
 
Denisovik душа компанииDenisovik душа компанииDenisovik душа компанииDenisovik душа компанииDenisovik душа компанииDenisovik душа компанииDenisovik душа компанииDenisovik душа компании
Регистрация: 15.08.2009
Сообщений: 149
Популярность: 1012
Сказал(а) спасибо: 74
Поблагодарили 123 раз(а) в 53 сообщениях
Отправить сообщение для Denisovik с помощью ICQ
 
По умолчанию Re: Помогите со скриптом на точку!

1. Скрипты пиши под [cоde] [/cоde]
2. Не проще найти в нете нормальный скрипт, чем искать ошибки в этом??? Бери например такой:
Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP для Грации
//version 0.8 от 26.01.2009г.
program Enchant_gracia;
{********************************************************************************
Возможности скрипта:
--------------------
- Панель управления;
- Затачиваем по очереди все предметы с ItemID пока не переломаем
  или не заточим, один предмет всегда остаётся;

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

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

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

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

MyICQ 402988808
********************************************************************************}

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

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

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

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

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

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

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

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

  if ready then exit;

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

  Ответить с цитированием
Ответ

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Помогите со скриптом Zverblin Общение и обсуждение 4 31.10.2010 02:27
Помогите со скриптом oscar1209 Общение и обсуждение Counter-Strike 0 07.08.2010 13:23
[Помогите!] Помогите со скриптом для WPF Kozalo Общение и обсуждение, архив Point Blank 4 05.05.2010 22:52

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

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

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