PDA

Просмотр полной версии : СКрипты для l2phx


GraNIT
27.07.2009, 13:53
Не нашел подходящей темки и надумал создать её...если что - переместите...Думаю она много кому пригодится...
Вот скрипты которые сам тестил, дописывал, находил:
PK Scanner (Gracia):
// Авторы: Furious, metalFan
// Отдельное спасибо PanAm за помощь в написании
// Версия: Gracia 1.5 PreFinal
Const UserName=('онатоле');
var
ObjectID, KarmaPK, TargetPK, MessagePK, ClassPK, i, x, y, z, TempPK: Integer;
NamePK, CvarPK : String;
ClassName: TStringList;
procedure Init;
begin
MessagePK:=1;
TargetPK:=0;
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS('PK Scanner for Gracia 1.5 by Furious, metalFan');
SendToClientEx(UserName);
ClassName :=TStringList.Create;
ClassName.LoadFromFile('ClassName.ini');
end;
procedure Free;
begin
ClassName.free;
end;
procedure OnConnect(WithClient: Boolean);
begin
end;
procedure OnDisonnect(WithClient: Boolean);
begin
end;
procedure MessageSend(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(Msg);
SendToClientEx(UserName);
end;
procedure TargetingPK(ObjectID: Integer);
begin
if TargetPK=1 then begin
buf:=#$1F;
WriteD(ObjectID); WriteD(0); Writed(0); Writed(0); WriteC(0);
SendToServerEx(UserName); end;
end;
procedure KillRadar;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(0);
WriteD(0);
WriteD(0);
SendToClientEx(UserName);
end;
function GetClassName(CID : integer) : string;
begin
result:=ClassName.Strings[CID];
end;
begin
if (FromServer) and (ConnectName=UserName) and (pck[1]=#$31) then
begin
x:=ReadD(2);
y:=ReadD(6);
z:=ReadD(10);
i:=22;
NamePK:=ReadS(i);
ClassPK:=ReadD(i+8);
KarmaPK:=ReadD(i+176);
if (KarmaPK>0) then
begin
ObjectID:=ReadD(18);
TargetingPK(ObjectID);
if MessagePK=1 then begin MessageSend(''+NamePK+' | '+GetClassName(ClassPK)+' | '+IntToStr(KarmaPK)+) end;
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(X);
WriteD(Y);
WriteD(Z);
SendToClientEx(UserName);
end;
end;
if (FromServer) and (ConnectName=UserName) and (pck[1]=#$08) then begin
TempPK:=ReadD(2);
case TempPK of ObjectID:
KillRadar;
end;
end;
if (FromClient) and (ConnectName=UserName) and (pck[1]=#$49) then
begin
CvarPK:=ReadS(2);
case CvarPK of
'\start':
begin
TargetPK:=1;
MessageSend('Search On!');
pck:='';
end;
'\stop':
begin
TargetPK:=0;
MessageSend('Stopped all services!');
pck:='';
end;
'\radar':
begin
MessageSend('Radar Killed');
KillRadar;
pck:='';
end;
end;
end;
end.
Автозаточка скилов:
const
nik='xxxxx';
Enchant=13;

var
SubID, SkillID, SkillLvl, CurrEnch: integer;

procedure Init; //Вызывается при включении скрипта
begin

end;

procedure OnTimer01(Sender: TObject);
begin

end;

procedure Free; //Вызывается при выключении скрипта
begin
CurrEnch:=0;
end;

procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin

end;

procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin

end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (pck[1]=#$62) then case pck[2] of
#$A0: //точнулся
if CurrEnch<Enchant then
begin
CurrEnch:=CurrEnch+1;
Buf:=#$D0;
WriteH(SubID);
WriteD(SkillID);
WriteD(SkillLvl+CurrEnch);
SendToServerEx(nik);
end;
#$A1: //не точнулся
begin
CurrEnch:=1;

Buf:=#$D0;
WriteH(SubID);
WriteD(SkillID);
WriteD(SkillLvl+CurrEnch);
SendToServerEx(nik);

end;
end;

if FromClient and (pck[1]=#$D0) then
begin
SubID:=ReadH(2);
SkillID:=ReadD(4);
SkillLvl:=ReadD(8)-1;
CurrEnch:=1;
end;
end.
Описание:закупаемся книжками, выставляем уровень заточки и ник
точим на +1, скрипт продолжает пока не точнет до указанного уровня
ЗЫ точить надо с нуля, иначе счетчик не правильно считать начнет.
Слитие чара до определенного уровня (ЗЫ: также можно фармить бонусы ща PVP):
// скрипт сливаем чара до заданного ЛВЛ
// скрипт вкл для gm
// Начало работы скрипта когда чар: gm берет в таргет чара: nyb
// 1. чар nyb начинает атакавать чара gm .чар gm убивает чара: nyb
// 2. gm ресает nyb свитком:nyb встает и сново 1
// В ПАТИ ЧАТ ПИШЕМ ДО КАКОГО ЛВЛ СЛИВАТЬ
// автор TAMBIK


const
// Написать имена своих ЧАРОВ

nyb='ххххх';// кого убивают

gm='ххххх';// кто убивает

var
timer1: TTimer;
timer2: TTimer;
mytext:string;
Name,Namegm, Bypass,Message:string;
Level,Levelup,textID,textlvl:integer;
nybID,gmID,Attaka,slivlvl,i:integer;
gmmm, gmX,gmY,gmZ,nybX,nybY,nybZ:integer;
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(gm);
end;
procedure Attakagm;
begin
buf:=#$01;
WriteD(nybID);
WriteD(nybX);
WriteD(nybY);
WriteD(nybZ);
SendToServerEx(gm);
SendMsg2('сливаю nyb '+Name+'');
end;
procedure Targetnyb;
begin
buf:=#$1F;
WriteD(gmID);
WriteD(gmX);
WriteD(gmY);
WriteD(gmZ);
SendToServerEx(nyb);
end;
procedure Attakanyb;
begin
buf:=#$01;
WriteD(gmID);
WriteD(gmX);
WriteD(gmY);
WriteD(gmZ);
SendToServerEx(nyb);
SendMsg2('атакую '+Namegm+'');
end;
procedure OnTimer1(Sender: TObject);
begin
Targetnyb;
Attakanyb;
if ( Attaka=1) then begin
Attakagm;
end;
end;
procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=2000;

slivlvl:=0;
Attaka:=0;
Levelup:=1;
end;
procedure Free;
begin
timer1.free;
end;
begin
if fromserver and (pck[1]=#$32) and (ConnectName=gm) then begin
gmX:=ReadD(2);
gmY:=ReadD(6);
gmZ:=ReadD(10);
gmmm:=ReadD(14);
gmID:=ReadD(18);
Namegm:=ReadS(22);
end;
begin
if FromClient and (pck[1]=#$1F) and (ConnectName=gm) then begin
nybID:=ReadD(2);
nybX:=ReadD(6);
nybY:=ReadD(10);
nybZ:=ReadD(14);
SendMsg2('цель '+Name+'вижу');
if (0<slivlvl) then begin
timer1.enabled:=true;
SendMsg2('сливаем до '+IntToStr(textlvl)+' '+Name+'');
end;
end;
begin
if fromserver and (pck[1]=#$32) then begin
if (ReadD(18)=nybID) then begin
i:=22;
Name:=ReadS(i);
i:=i+12;
Level:= ReadD(i);
Message:=' lVl='+inttostr(Level);
SendMsg2(Name+':'+Message);
if (Level<=slivlvl) then begin
timer1.enabled:=false;
nybID:= 0;
gmID:=0;
gmX:=0;
gmY:=0;
gmZ:=0;
Attaka:=0;//атака gm
SendMsg2('Поздравляю '+Name+' вы достигли указаного лвл');
SendMsg2(''+Name+' благодарит TAMBIKa');
Levelup:=0;//атака nyb
end;
end;
end;
begin
if fromserver and (pck[1]=#$00) then begin
if (ReadD(2)=nybID) then begin
timer1.enabled:=false;
SendMsg2(''+Namegm+' убил:'+Name+'');
Attaka:=0;
buf:=hstr('19 74 94 6B 11 00 00 00 00 ');
SendToServerEx(gm);
SendMsg2(''+Namegm+' ресает '+Name+'');
end;
end;
begin
if FromServer and (pck[1]=#$33) then begin
if (ReadD(2)=nybID) then begin
Attaka:=1;
end;
end;
begin
if fromserver and (pck[1]=#$F3) then begin
buf:=hstr('C6 E6 05 00 00 01 00 00 00 00 00 00 00 ');
SendToServerEx(nyb);
if (Levelup=1) then begin
timer1.enabled:=true;// запуск таймера атака
SendMsg2('Продолжаю Атаковать '+Namegm+'');
end;
end;
//===========================================
begin

if FromClient and (pck[1]=#$49) then begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
textlvl:=StrToInt(mytext);
if (textID=3) then begin
slivlvl:=StrToInt(mytext);
SendMsg2( 'Сливаем до: '+IntToStr(textlvl)+' ЛВЛ ' );

pck:='';
exit;
end;
end;
//===========================================
end;
end;
end;
end;
end;
end;
end.
Скрипт для инфы сопартийцев:
//Знай инфу кто с тобой в пати
// информация приходит в момент вступления в пати
// CP,XP,MP,lvl
//сообщение в чат
// ХБ хроник TAMBIK
var
Name,Message:string;
MaxCP,MaxHP,MaxMP, Level,i:integer;
//===========================================
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
//==========================================

//===========================================
// следим за ЛВЛ
begin
if fromserver and (pck[1]=#$4E) then begin
i:=16;
Name:=ReadS(i);
i:=i+4;
MaxCP:=ReadD(i);
i:=i+4;
MaxHP:=ReadD(i);
i:=i+4;
MaxMP:=ReadD(i);
Level:=ReadD(i);
Message:='CP='+inttostr(MaxCP)+'XP='+inttostr(MaxH P)+'MP='+inttostr(MaxMP)+'lVl='+inttostr(Level);
SendMsg2(Name +':'+ Message);

end;
//===========================================
// следим за ЛВЛ
begin
if fromserver and (pck[1]=#$4F) then begin
i:=12;
Name:=ReadS(i);
i:=i+4;
MaxCP:=ReadD(i);
i:=i+4;
MaxHP:=ReadD(i);
i:=i+4;
MaxMP:=ReadD(i);
Level:=ReadD(i);
Message:='CP='+inttostr(MaxCP)+'XP='+inttostr(MaxH P)+'MP='+inttostr(MaxMP)+'lVl='+inttostr(Level);
SendMsg2(Name +':'+ Message);
end;
end;
end.
Автоматизация заточки предметов до необходимого уровня by NLObP для Грации:
//Автоматизация заточки предметов до необходимого уровня 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.Str ings[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.Stri ngs[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(ItemT ype2)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(DefA ttrHoly)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=ItemT ype2;7=CustomType1;
8=isEquipped;9=BodyPart;10=EnchantLevel;11=CustTyp e2;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.

Добавлено через 1 минуту
Скрипт на аргументацию:
begin
buf:=hstr('FE 52 00 ');//окно удаления лс
SendToClient;
buf:=hstr('FE 51 00 ');//окно Арг
SendToClient;
buf:=hstr('43 26 00 0E 1C 07 10');//вещь
SendToServer;
buf:=hstr('43 27 00 0E 1C 07 10 7D 46 06 10');//лс
SendToServer;
buf:=hstr('43 28 00 0E 1C 07 10 7D 46 06 10 93 5D 05 10 19 00 00 00');//гемы
SendToServer;
buf:=hstr('FE 51 00 ');//окно удаления арг
SendToClient;

buf:=hstr('43 45 00 5D FB 03 10 ');//вещь
SendToServer;
end.
Вставляем в любом месте в любое время, запасаемся токо ЛСами и Гемами...окна появляються сами, и нажмать надо по минимуму...:d

Добавлено через 34 минуты
Сори, не заметил темку...
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Перенесите плиз сюда мои сообщения...а я их там отредактирую...Ещё раз извините..