Скриптинг Форум посвещенный созданию скриптов для L2PacketHack
25.01.2009, 21:19
#1
Новичок
Регистрация: 24.01.2009
Сообщений: 11
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
YssurTiger о_О такаяже фигня..2 пакета один с ур заточки второй хз с чем...
версия 3.4.1.81 ...обьясни пожалуйста как ты сделал?
26.01.2009, 01:43
#2
Новичок
Регистрация: 26.01.2009
Сообщений: 1
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Ребят подскажите я хочу заточить себе шмот на +20 , мне нужно именно чтоб он до +20 заточил и остановился , может кто то помочь?Если можно то настроенный скрипт дайте , а лучше стукните в асю очень прошу...8 803 759...Спасибо
26.01.2009, 02:53
#3
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
Цитата:
Сообщение от
3646696
Помогите плз когда запускаю скрипт
не показивает веши чистые строчки
как зделать што-бы показивалося?
Взарание спасибо!
Код:
ItemID Кол-во
"Предмет: 0 833696309
Необходимо исправить ItemsID.ini в комплекте пакетхака. Можно попробовать добавить строчку со своими вещами, по типу там описанных, а ещё лучше найти/сделать самому именно такой, какой нужно для твоего сервера.
26.01.2009, 06:25
#4
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
>>>
Автоматизация заточки предметов до необходимого уровня by NLObP для Грации
delphi Код:
//Автоматизация заточки предметов до необходимого уровня 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 .
<<<
Пробуйте. Пишите замечания.
Добавлено через 5 минут
Цитата:
Сообщение от
Spozi
в этой хм я вставляю пакет с нужной заточкой...(87 09 00 00 00 00 00 00 00 00 00 00 00)
но он все равно продолжает точить дальше...
подскажите в чем ошибка у меня?
Ошибка в том, что в этом пакете нет уровня заточки, там только результат: 0 -заточил/1-сломал/2-в 0 сбросил
Последний раз редактировалось NLObP, 02.02.2009 в 04:18 .
Причина: Добавлено сообщение
За это сообщение NLObP нажился 14 спасибками от:
Devik ,
Foil ,
GLobal ,
HooleeCheeter ,
krot3388118 ,
Maxima ,
rubela ,
Spozi ,
TAMBIK ,
v0ltag3 ,
VanTG ,
Арти ,
Смоки ,
Эдик
26.01.2009, 08:20
#5
Новичок
Регистрация: 18.01.2009
Адрес: Владивосток
Сообщений: 16
Сказал Спасибо: 3
Имеет 2 спасибок в 2 сообщенях
Цитата:
Сообщение от
NLObP
Ошибка в том, что в этом пакете нет уровня заточки, там только результат: 0 -заточил/1-сломал/2-в 0 сбросил
ты не прав
вот мой конец скрипта
Код:
begin
if FromServer and (ConnectName=Name) and (pck = HStr('87 19 00 00 00 00 00 00 00 00 00 00 00')) then begin
timer.enabled:=false;
end;
где 19 это уровень заточки .если перевести из байтов получается 25.
на 25 спокойно останавливается.
самое главное правильно все сделать
Код:
//Автоматизация заточки предметов до необходимого уровня.
//мини-скрипт идея, доработка Shizo.
//by Xelat
const
Name='CJIADKA9'; //без этого не останавливал timer.enabled:=false;
var
timer:TTimer;
procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=1000;
timer.OnTimer:=@fireTimer;
timer.enabled:=true;
end;
procedure Free;
begin
timer.Free;
end;
procedure fireTimer(Sender: TObject);
begin
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');скрол Ы виапон.если заточки остаются в котомке.то пакет не меняется
SendToServer;
buf:=hstr('43 4F 00 C9 A3 D2 10 ');вещь
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 98 A4 D2 10 ');
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 C9 A3 D2 10 ');
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 98 A4 D2 10 ');
SendToServer;
buf:=hstr('0C 02 30 03 10 00 00 00 00 ');
SendToServer;
buf:=hstr('43 4F 00 15 A5 D2 10 ');
SendToServer;
buf:=hstr('68 A3 5F 01 00 16 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ');покупка 5 заточек
SendToServer;
end;
begin
if FromServer and (ConnectName=Name) and (pck = HStr('87 19 00 00 00 00 00 00 00 00 00 00 00')) then begin
timer.enabled:=false;
end;
end.
в пм не писать,у кого не получается точите руками и не мучайте остальных.vlineage.ru очень баганный сервер.просто нужно правильно использовать баги.
28.01.2009, 13:53
#6
Новичок
Регистрация: 28.01.2009
Сообщений: 3
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Цитата:
Сообщение от
YssurTiger
ты не прав
вот мой конец скрипта
Код:
begin
if FromServer and (ConnectName=Name) and (pck = HStr('87 19 00 00 00 00 00 00 00 00 00 00 00')) then begin
timer.enabled:=false;
end;
где 19 это уровень заточки .если перевести из байтов получается 25.
на 25 спокойно останавливается.
самое главное правильно все сделать
я ставлю 06 вместо 19 (чтоб точило до 6) 87 06 00 00 00 00 00 00 00 00 00 00 00, оно не останавливается((( пробывал разные варианты вообще не але, в чем проблема? помогите
28.01.2009, 22:06
#7
Рыцарь
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
Цитата:
Сообщение от
salamjik
я ставлю 06 вместо 19 (чтоб точило до 6) 87 06 00 00 00 00 00 00 00 00 00 00 00, оно не останавливается((( пробывал разные варианты вообще не але, в чем проблема? помогите
Проверь при ручной точке, как меняются в этом пакете указанные тобой значения. Мне кажеться, что вы ошибаетесь и используете не тот пакет для проверки. Я использую пакет 11=ItemList и 21=InventoryUpdate в которых есть уровень заточки вещи.
31.01.2009, 12:50
#8
Новичок
Регистрация: 28.01.2009
Сообщений: 3
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Писал правильно, проверял нессколько раз, нифига((((( изза чего он может не срабатывать еще? =(
Цитата:
Сообщение от
NLObP
Проверь при ручной точке, как меняются в этом пакете указанные тобой значения. Мне кажеться, что вы ошибаетесь и используете не тот пакет для проверки. Я использую пакет 11=ItemList и 21=InventoryUpdate в которых есть уровень заточки вещи.
А проверял, я в ручную точил выловил его,при каждой новой точке я ловил пакет и сравнивал это цисло, оно меня естя в зависимости от уровня точке все совпадает. но почему то не останавливает на этом пакете(( может не срабатывает это сравнение, уже голову сломал((((
Цитата:
Сообщение от
NLObP
Я использую пакет 11=ItemList и 21=InventoryUpdate в которых есть уровень заточки вещи.
а не мог бы ты его в готовом виде написать я попробую, просто я новичок в этом деле(
Последний раз редактировалось NLObP, 02.02.2009 в 04:01 .
04.04.2009, 23:15
#9
Новичок
Регистрация: 02.04.2009
Сообщений: 5
Сказал Спасибо: 1
Имеет 5 спасибок в 3 сообщенях
Вот оно
delphi Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP
//version 0.7 от 20.07.2008г.
program Enchant;
{********************************************************************************
Возможности скрипта:
--------------------
0.1
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;
0.2
+ исправлен выбор названий предметов из инвентаря;
+ небольшая правка кода;
0.3
+ Проверено на theAbyss (все предметы инвентаря чара видит);
+ исправлена ошибка кода выбора скроллов;
+ исправлена ошибка подсчета суммы предметов;
0.4
+ специально для Miler проверено на La2Titan (затачивал Mantikore Skin Shirt до +7);
+ исправлена процедура InventoryUpdate;
+ изменена логика затачивания;
+ заготовка покупки заточек/вещей;
0.5
+ проверено на L2Fantasy;
+ добавлена проверка, если заточка сбрасывается в 0 без поломки вещи;
+ добавлен код, если надо точить одну вещь (опционально);
0.6
+ изменил выборку ItemId;
0.7
+ исправлено смещение в CreateItemBase для С4, спасибо Mulder
====================================================================
Работа скрипта проверялась на локальном Интерлюда сервере,
для С4 не проверялась и поддерживаться далее не будет.
====================================================================
Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.
MyICQ 402988808
********************************************************************************}
//............................................
//Список констант
const
Name='Name' ; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true ; //Interlude - true, C4 - false
//-------------------------
max =80 ; //количество слотов в инвентаре чара
//............................................
//Список переменных
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 : boolean ;
timer : TTimer;
ItemCount, CurEnchLvl: 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;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : 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 ];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);
ComboBoxItem.Enabled :=false ; //выключаем
end else begin
ItemID:=0 ; //отмена
ItemOID:=0 ;
ComboBoxItem.Enabled :=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
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1 ,ComboBoxScroll.ItemIndex +1 ];
ScrollID:=ItemBase[2 ,ComboBoxScroll.ItemIndex +1 ];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled :=false ; //выключаем
end else begin
ScrollID:=0 ; //отмена
ScrollOID:=0 ;
ComboBoxScroll.Enabled :=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) ;
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.7' ;
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 :=1000 ; //время задержки
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 Say( msg:string ) ;
begin
buf:=hstr( '4A 00 00 00 00' ) ;
WriteD( 2 ) ;
WriteS( Name) ;
WriteS( msg) ;
SendToClientEx( Name) ;
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!
//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));
end ;
//вносим изменения в чекбоксы
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]) ) ;
add:=true ;
end ;
end ;
end ;
//изменен
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]) ) ;
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 ;
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 ;
//......................................
{//***************************************************************
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 ( CurEnchLvl>=strtoint ( Edit1.Text ) ) then begin
msg.Lines .Add ( 'Нечего точить! Прервано!' ) ;
timer.enabled :=false ;
exit ;
end ;
if ( sumitem( ItemID) <=0 ) 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 ; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end ;
//......................................
//***************************************************************
// Вся торговля здесь!!!
//***************************************************************
{procedure OnTrade1(Sender: TObject);
begin
case trade of
//-------------------------------------------------
//покупаем у Misc Trader из массива TradeBuyItem1
//-------------------------------------------------
100: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
//-------------------------------------------------
//покупаем у Armor Trader из массива TradeBuyItem2
//-------------------------------------------------
200: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
end;
end;
end;
} //......................................
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit ;
//****************************************************************************
//покупка состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d(ItemBodyPart)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count)
//****************************************************************************
{ if ReadyToBuy and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getbuylist);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет
//s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d(ItemBodyPart)
#$11: begin
msg.Lines.Add('S>Пакет BuyList #$11');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count)
msg.Lines.Add('C>Пакет RequestBuyItem #$1F');
//продадим первый из списка
msg.Lines.Add('Item: ID:'+IntToStr(TradeBuyItem[Trd])+' Count:'+IntToStr(NeedBuy));
delay(1000);
RequestBuyItem(TradeBuyItem[Trd],NeedBuy);
ReadyToBuy:=false;
end;
end;
end;
end;
} //......................................
//****************************************************************************
if FromServer then
case pck[1 ] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27 : InventoryUpdate; //Обновление базы
//......................................
//Пакет 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 ;
//************************************************
msg.Lines .Add ( 'Пробуем улучшить ItemID=' +IntToStr ( ItemID) +' ItemOID=' +IntToStr ( ItemOID) ) ;
RequestEnchantItem( ItemOID) ;
ready:=false ;
timer.enabled :=true ; //пока в тесте отключаем (вкл. после заточки предмета)
end ;
#$81 : begin
if readd( 2 ) =0 then begin
msg.Lines .Add ( 'Пробуем улучшить ItemID=' +IntToStr ( ItemID) +' ItemOID=' +IntToStr ( ItemOID) ) ;
RequestEnchantItem( ItemOID) ;
ready:=false ;
timer.enabled :=true ;
end else begin
msg.Lines .Add ( 'Пробуем улучшить ItemID=' +IntToStr ( ItemID) +' ItemOID=' +IntToStr ( ItemOID) ) ;
CurEnchLvl:=10 ; //выставляем текущий уровень при фэйле и при точке блесседами
end ;
end ;
end ;
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 ;
end ;
{#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;}
end .
Сразу говорю могут выбивать ошибки, просто нажимать ОК и все)
Вводить нужное число заточек но меньше на 1...
т.е. если надо на 25, ставить 24.
Сделал как понимал) Т.к. разбираюсь тока с С++
Если что то не так или какая то фигня можеш подправить)
Последний раз редактировалось 3xdimon, 05.04.2009 в 09:38 .
За это сообщение 3xdimon нажился 3 спасибками от:
05.04.2009, 12:47
#10
Пользователь
Регистрация: 28.06.2008
Сообщений: 73
Сказал Спасибо: 7
Имеет 24 спасибок в 16 сообщенях
Цитата:
Сообщение от
3xdimon
Вот оно
delphi Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP
//version 0.7 от 20.07.2008г.
program Enchant;
{********************************************************************************
Возможности скрипта:
--------------------
0.1
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим, один предмет всегда остаётся;
0.2
+ исправлен выбор названий предметов из инвентаря;
+ небольшая правка кода;
0.3
+ Проверено на theAbyss (все предметы инвентаря чара видит);
+ исправлена ошибка кода выбора скроллов;
+ исправлена ошибка подсчета суммы предметов;
0.4
+ специально для Miler проверено на La2Titan (затачивал Mantikore Skin Shirt до +7);
+ исправлена процедура InventoryUpdate;
+ изменена логика затачивания;
+ заготовка покупки заточек/вещей;
0.5
+ проверено на L2Fantasy;
+ добавлена проверка, если заточка сбрасывается в 0 без поломки вещи;
+ добавлен код, если надо точить одну вещь (опционально);
0.6
+ изменил выборку ItemId;
0.7
+ исправлено смещение в CreateItemBase для С4, спасибо Mulder
====================================================================
Работа скрипта проверялась на локальном Интерлюда сервере,
для С4 не проверялась и поддерживаться далее не будет.
====================================================================
Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.
MyICQ 402988808
********************************************************************************}
//............................................
//Список констант
const
Name='Name' ; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true ; //Interlude - true, C4 - false
//-------------------------
max =80 ; //количество слотов в инвентаре чара
//............................................
//Список переменных
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 : boolean ;
timer : TTimer;
ItemCount, CurEnchLvl: 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;
CheckBoxItem : TCheckBox;
ComboBoxItem : TComboBox;
ButtonStartEnchant : TButton;
ButtonStopEnchant : TButton;
CheckBoxScroll : TCheckBox;
ComboBoxScroll : TComboBox;
EditItemVal : TEdit;
EditScrollVal : TEdit;
EditScrollOID : TEdit;
EditItemOID : TEdit;
Label1 : TLabel;
Label3 : TLabel;
Edit1 : TEdit;
Edit2 : 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 ];
//проверка
// EditItemOID.Text:=Inttostr(ItemID);
// EditItemVal.text:=inttostr(ItemOID);
ComboBoxItem.Enabled :=false ; //выключаем
end else begin
ItemID:=0 ; //отмена
ItemOID:=0 ;
ComboBoxItem.Enabled :=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
begin
if CheckBoxScroll.Checked
then begin
ScrollOID:=ItemBase[1 ,ComboBoxScroll.ItemIndex +1 ];
ScrollID:=ItemBase[2 ,ComboBoxScroll.ItemIndex +1 ];
//проверка
// EditScrollOID.Text:=Inttostr(ScrollID);
// EditScrollVal.text:=inttostr(ScrollOID);
ComboBoxScroll.Enabled :=false ; //выключаем
end else begin
ScrollID:=0 ; //отмена
ScrollOID:=0 ;
ComboBoxScroll.Enabled :=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) ;
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.7' ;
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 :=1000 ; //время задержки
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 Say( msg:string ) ;
begin
buf:=hstr( '4A 00 00 00 00' ) ;
WriteD( 2 ) ;
WriteS( Name) ;
WriteS( msg) ;
SendToClientEx( Name) ;
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!
//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));
end ;
//вносим изменения в чекбоксы
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]) ) ;
add:=true ;
end ;
end ;
end ;
//изменен
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]) ) ;
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 ;
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 ;
//......................................
{//***************************************************************
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 ( CurEnchLvl>=strtoint ( Edit1.Text ) ) then begin
msg.Lines .Add ( 'Нечего точить! Прервано!' ) ;
timer.enabled :=false ;
exit ;
end ;
if ( sumitem( ItemID) <=0 ) 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 ; //готовы затачивать
// delay(1000);
// RequestEnchantItem(Item);
// delay(1000);
//************************************************
// msg.Lines.Add('Пробуем улучшить ItemID='+IntToStr(Item));
// end;
end ;
//......................................
//***************************************************************
// Вся торговля здесь!!!
//***************************************************************
{procedure OnTrade1(Sender: TObject);
begin
case trade of
//-------------------------------------------------
//покупаем у Misc Trader из массива TradeBuyItem1
//-------------------------------------------------
100: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
//-------------------------------------------------
//покупаем у Armor Trader из массива TradeBuyItem2
//-------------------------------------------------
200: begin
if ReadyToBuy then exit; //если еще купили предыдущую вещь, то выходим сразу
//мы у фишермана, покупаем крючки
if FishermanOID=0 then begin
Trade1.enabled:=false; //останавливаем торговлю
msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');
exit; //выходим
end;
if TradeCount=TradeBuyItemCount then begin //проверка на выход из массива
trade:=400;
msg.Lines.Add('Всё купили!');
msg.Lines.Add('Переход к обмену...');
TradeCount:=0; //начнем сначала массива
end else begin
if FindItem(TradeBuyItem[TradeCount])<strtoint(EditLure.text) then begin
TargetAttacker(FishermanOID); //фишермана в таргет
msg.Lines.Add('Готовы купить:'+inttostr(TradeBuyItem[TradeCount]));
ReadyToBuy:=true; //готовы продавать
NeedBuy:=strtoint(EditLure.text)-colvoitm2; //докупаем до 50
msg.Lines.Add('Требуется докупит крючков:'+inttostr(NeedBuy));
end else msg.Lines.Add('Не надо покупать, уже есть:'+inttostr(colvoitm2));
Trd:=TradeCount;
inc(TradeCount);
msg.Lines.Add('TradeCount/TradeBuyItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeBuyItemCount-1));
end;
end;
end;
end;
} //......................................
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit ;
//****************************************************************************
//покупка состоит из следующих шагов:
//1. таргет на продавце, пауза, снова таргет c04=Action, c04=Action
//2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
//3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)
//4. приходит s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d(ItemBodyPart)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем c1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count)
//****************************************************************************
{ if ReadyToBuy and (FishermanOID<>0) then begin
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//после того как мы взяли в таргет продавца приходит этот пакет
//s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)
#$0F: begin
msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');
if ReadD(2)=FishermanOID then begin
//шлем запрос выбора пункта - продажа
//c21=RequestBypassToServer:s(Cmd)
delay(1000);
RequestByPassToServer(getbuylist);
msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (sell)');
end;
end;
//после выбора пункта - продажа, приходит этот пакет
//s11=BuyList:d(Money)h(ListID)w(ListCount)w(ItemType1)h(ObjectID)i(ItemID)d(maxcnt)w(ItemType2)w(h)d(ItemBodyPart)
#$11: begin
msg.Lines.Add('S>Пакет BuyList #$11');
ListID:=ReadD(6); //запоминаем, он все время разный
msg.Lines.Add('ListID='+inttostr(ListID));
//шлем запрос на продажу
//1F=RequestBuyItem:h(ListID)d(BuyCount)i(ItemID)d(Count)
msg.Lines.Add('C>Пакет RequestBuyItem #$1F');
//продадим первый из списка
msg.Lines.Add('Item: ID:'+IntToStr(TradeBuyItem[Trd])+' Count:'+IntToStr(NeedBuy));
delay(1000);
RequestBuyItem(TradeBuyItem[Trd],NeedBuy);
ReadyToBuy:=false;
end;
end;
end;
end;
} //......................................
//****************************************************************************
if FromServer then
case pck[1 ] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27 : InventoryUpdate; //Обновление базы
//......................................
//Пакет 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 ;
//************************************************
msg.Lines .Add ( 'Пробуем улучшить ItemID=' +IntToStr ( ItemID) +' ItemOID=' +IntToStr ( ItemOID) ) ;
RequestEnchantItem( ItemOID) ;
ready:=false ;
timer.enabled :=true ; //пока в тесте отключаем (вкл. после заточки предмета)
end ;
#$81 : begin
if readd( 2 ) =0 then begin
msg.Lines .Add ( 'Пробуем улучшить ItemID=' +IntToStr ( ItemID) +' ItemOID=' +IntToStr ( ItemOID) ) ;
RequestEnchantItem( ItemOID) ;
ready:=false ;
timer.enabled :=true ;
end else begin
msg.Lines .Add ( 'Пробуем улучшить ItemID=' +IntToStr ( ItemID) +' ItemOID=' +IntToStr ( ItemOID) ) ;
CurEnchLvl:=10 ; //выставляем текущий уровень при фэйле и при точке блесседами
end ;
end ;
end ;
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 ;
end ;
{#$81: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;}
end .
Сразу говорю могут выбивать ошибки, просто нажимать ОК и все)
Вводить нужное число заточек но меньше на 1...
т.е. если надо на 25, ставить 24.
Сделал как понимал) Т.к. разбираюсь тока с С++
Если что то не так или какая то фигня можеш подправить)
Нет я имел в виду исправленый Interludовский код, уже дожился до такого ппц.
Авто кликер клацает по старту)Скрипт выходит полуавтоматический)
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 11:13 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!