Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация

Скрипты для l2phx

-

Скрипты и перехват пакетов

- Скрипты и перехват пакетов

Ответ
 
Опции темы
Старый 31.03.2009, 11:16   #1
-= Чит-Мастер =-
 Рыцарь-защитник
Аватар для Razzor
 
Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(
Регистрация: 23.04.2008
Сообщений: 583
Популярность: 26705
Золото Zhyk.Ru: 100
Сказал(а) спасибо: 1,365
Поблагодарили 2,428 раз(а) в 666 сообщениях
Отправить сообщение для Razzor с помощью ICQ Отправить сообщение для Razzor с помощью Skype™
 
По умолчанию Скрипты для l2phx

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

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


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

Последний раз редактировалось Razzor; 31.05.2009 в 10:36.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
DMSnik (18.02.2010), m1roo (05.07.2009), page10 (10.05.2011)
Старый 02.04.2009, 18:23   #2
-= Чит-Мастер =-
 Рыцарь-защитник
Аватар для Razzor
 
Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(
Регистрация: 23.04.2008
Сообщений: 583
Популярность: 26705
Золото Zhyk.Ru: 100
Сказал(а) спасибо: 1,365
Поблагодарили 2,428 раз(а) в 666 сообщениях
Отправить сообщение для Razzor с помощью ICQ Отправить сообщение для Razzor с помощью Skype™
 
По умолчанию Re: Скрипты для l2phx

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*GemsAmount)+')</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)+'.'+TimeToStr(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. Лог чата.
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
DMSnik (18.02.2010), m1roo (05.07.2009), ridgid (09.09.2009), [4it]Quickly (14.07.2009)
Старый 06.04.2009, 13:29   #3
-= Чит-Мастер =-
 Рыцарь-защитник
Аватар для Razzor
 
Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(
Регистрация: 23.04.2008
Сообщений: 583
Популярность: 26705
Золото Zhyk.Ru: 100
Сказал(а) спасибо: 1,365
Поблагодарили 2,428 раз(а) в 666 сообщениях
Отправить сообщение для Razzor с помощью ICQ Отправить сообщение для Razzor с помощью Skype™
 
По умолчанию Re: Скрипты для l2phx

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
  Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
Benjamin (07.09.2009), DMSnik (18.02.2010), m1roo (05.07.2009), Mest (24.11.2009), ridgid (09.09.2009), Skilled (12.07.2009)
Старый 07.04.2009, 15:48   #4
-= Чит-Мастер =-
 Рыцарь-защитник
Аватар для Razzor
 
Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(Razzor сломал счётчик популярности :(
Регистрация: 23.04.2008
Сообщений: 583
Популярность: 26705
Золото Zhyk.Ru: 100
Сказал(а) спасибо: 1,365
Поблагодарили 2,428 раз(а) в 666 сообщениях
Отправить сообщение для Razzor с помощью ICQ Отправить сообщение для Razzor с помощью Skype™
 
По умолчанию Re: Скрипты для l2phx

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

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

Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP для Грации
//version 0.8 от 26.01.2009г.
program Enchant_gracia;
{********************************************************************************
Возможности скрипта:
--------------------
- Панель управления;
- Затачиваем по очереди все предметы с ItemID пока не переломаем
  или не заточим, один предмет всегда остаётся;

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

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

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

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

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

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

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

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

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

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

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

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

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

  if ready then exit;

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

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

Применение: Вставте в l2phx во вкладку скрипты не забудьте поменять ник(NLObP) в скрипте на свой.
Автор скриптов: NLObP
  Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
DMSnik (18.02.2010), m1roo (05.07.2009), ridgid (09.09.2009), Rinada (27.06.2009), Silence (15.08.2009), Skilled (12.07.2009)
Старый 14.05.2009, 14:30   #5
 Разведчик
Аватар для Тамбик
 
Тамбик никому не известный тип
Регистрация: 14.05.2009
Сообщений: 2
Популярность: 14
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Скрипты для l2phx

Автор я 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   #6
Знатный Читер
 Рыцарь
Аватар для Федя
 
Федя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе ценуФедя знает себе цену
Регистрация: 15.06.2009
Сообщений: 340
Популярность: 4051
Сказал(а) спасибо: 575
Поблагодарили 511 раз(а) в 217 сообщениях
Отправить сообщение для Федя с помощью ICQ Отправить сообщение для Федя с помощью Skype™
 
По умолчанию Re: Скрипты для l2phx

Автоматизация старого дюпа ц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.
  Ответить с цитированием
Пользователь сказал cпасибо:
[4it]Quickly (14.07.2009)
Старый 14.07.2009, 21:34   #7
 Разведчик
Аватар для Catchy
 
Catchy на правильном пути
Регистрация: 14.07.2009
Сообщений: 36
Популярность: 64
Сказал(а) спасибо: 7
Поблагодарили 27 раз(а) в 14 сообщениях
Отправить сообщение для Catchy с помощью ICQ
 
По умолчанию Re: Скрипты для l2phx

Скрипт на телепортацию 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#$00#$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.
________________
Чем тоньше лёд, тем больше всем хочется убедиться, выдержит ли он.(с)
Помог -> Спасибку!

Последний раз редактировалось Catchy; 19.07.2009 в 20:15.
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
0n1y (03.10.2009), Alex-A (20.09.2009), wantedboy (30.10.2009), wednesday (10.09.2009)
Старый 15.08.2009, 15:19   #8
Заблокирован
 Старший сержант
Аватар для GraNIT
 
GraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауру
Регистрация: 27.07.2009
Сообщений: 237
Популярность: 578
Сказал(а) спасибо: 593
Поблагодарили 329 раз(а) в 147 сообщениях
Отправить сообщение для GraNIT с помощью ICQ Отправить сообщение для GraNIT с помощью Skype™
 
Thumbs up Re: Скрипты для l2phx

Program ItemPainter C4, C6
Код:
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,ComboBoxDirection: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*(ComboBoxScale.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*(ComboBoxScale.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,ComboBoxDirection: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*(ComboBoxScale.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*(ComboBoxScale.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.
Инструкция:
[HTML]//В Name ввдите ник
Нарисуйте картинку в любом графическом редакторе.
В поле "Путь к фалу" введите путь к этому файлу и нажмите Load
Черный,красный,зеленый,голубой,желтый цвета пикселей можно привязать к отдельному предмету
Выберите цвет в боксе color, затем предмет в боксе Item (предметов должно быть>1 чтобы они появились в списке)
scale - масштаб отступа между предметами от 1:1 до 10:1
Самый оптимальный масштаб 5:1
Направление - согласно компасу в игре[/HTML]
Пример [Ссылки могут видеть только зарегистрированные пользователи. ]
PHP код:
 Копирайт Coderx.ru отедльное спасибо Fer123 и QaK за идею и исполнение=) 
  Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
Benjamin (15.08.2009), Derzkiy (28.10.2009), GnomMaster (19.01.2010), sacredandy (22.10.2009)
Старый 15.08.2009, 19:15   #9
 Сержант
Аватар для Benjamin
 
Benjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компании
Регистрация: 08.07.2009
Сообщений: 159
Популярность: 913
Сказал(а) спасибо: 305
Поблагодарили 197 раз(а) в 97 сообщениях
Отправить сообщение для Benjamin с помощью ICQ
 
По умолчанию Re: Скрипты для l2phx

Скрипт для поиска сундуков по 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.
Цитата:
Сообщение от devils0nПосмотреть сообщение
Скрипт на заточку лежал до недавнего времени в подполье, но им особо там некто не пользуется (да и сам скрипт в шару был отправлен давно) - перезалейти этот скрипт пожалуйста...

Цитата:
Сообщение от gashichПосмотреть сообщение
перезалейте плиз

Цитата:
Сообщение от tokmakowПосмотреть сообщение
Перезалейте на депозит плииииз

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

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


Автоматизация изготовления ключей
Автор: 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.

Последний раз редактировалось Benjamin; 15.08.2009 в 19:53. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 08.09.2009, 22:14   #10
 Разведчик
Аватар для MarkoPolo
 
MarkoPolo на правильном пути
Регистрация: 06.09.2009
Сообщений: 20
Популярность: 28
Сказал(а) спасибо: 3
Поблагодарили 8 раз(а) в 5 сообщениях
 
По умолчанию Re: Скрипты для l2phx

Скрипт на тп , то место которое запомнили(для серверов с тупой гео) Тестил на 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.
Удобно Использовать вместе с скриптом на тп.Например ходить на твт(Сохранил точку где появился, тп в город за бафом и потом обратно на арену) .

Последний раз редактировалось MarkoPolo; 08.09.2009 в 22:38.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
GraNIT (08.09.2009), S.O.A.D (23.09.2012)
Старый 08.09.2009, 22:25   #11
Заблокирован
 Старший сержант
Аватар для GraNIT
 
GraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауруGraNIT излучает ауру
Регистрация: 27.07.2009
Сообщений: 237
Популярность: 578
Сказал(а) спасибо: 593
Поблагодарили 329 раз(а) в 147 сообщениях
Отправить сообщение для GraNIT с помощью ICQ Отправить сообщение для GraNIT с помощью Skype™
 
По умолчанию Re: Скрипты для l2phx

Простенький скрипт для "глухих", перенаправляет сообщения приходящие из выбранного вами чата в чат 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
  Ответить с цитированием
Пользователь сказал cпасибо:
MarkoPolo (08.09.2009)
Старый 09.09.2009, 11:12   #12
 Разведчик
Аватар для MarkoPolo
 
MarkoPolo на правильном пути
Регистрация: 06.09.2009
Сообщений: 20
Популярность: 28
Сказал(а) спасибо: 3
Поблагодарили 8 раз(а) в 5 сообщениях
 
По умолчанию Re: Скрипты для l2phx

Скрипт на перевод текста .
Например заходишь в игру и пишешь 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.
  Ответить с цитированием
Старый 20.09.2009, 15:38   #13
 Сержант
Аватар для Benjamin
 
Benjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компанииBenjamin душа компании
Регистрация: 08.07.2009
Сообщений: 159
Популярность: 913
Сказал(а) спасибо: 305
Поблагодарили 197 раз(а) в 97 сообщениях
Отправить сообщение для Benjamin с помощью ICQ
 
По умолчанию Re: Скрипты для l2phx

Код:
//Скрипт на возрождение на месте после смерти. 
//Включите скрипт,когда вы умерли возьмите себя в таргет и нажмите в город. 
//Вы встанете наместе. 
//Автор 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.

Последний раз редактировалось HellFire; 10.10.2009 в 21:55.
  Ответить с цитированием
Старый 21.10.2009, 17:04   #14
 Пехотинец
Аватар для dager315
 
dager315 на правильном путиdager315 на правильном пути
Регистрация: 24.05.2009
Сообщений: 94
Популярность: 152
Сказал(а) спасибо: 183
Поблагодарили 72 раз(а) в 47 сообщениях
Отправить сообщение для dager315 с помощью ICQ
 
По умолчанию Re: Скрипты для l2phx

Вот он
положить в папку l2phx.... в папку setings или просто в папку с прогой
Вложения
Тип файла: rar ItemsId.rar (82.1 Кб, 1938 просмотров)
________________
Чё уставился, СПАСИБО жми =))

P.S
КаПаЙ
  Ответить с цитированием
Старый 29.10.2009, 14:20   #15
 Разведчик
Аватар для Mest
 
Mest на правильном пути
Регистрация: 13.09.2009
Сообщений: 38
Популярность: 42
Сказал(а) спасибо: 5
Поблагодарили 16 раз(а) в 8 сообщениях
 
По умолчанию Re: Скрипты для l2phx

Антитаргет (пробывал на 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.

Последний раз редактировалось Mest; 29.10.2009 в 14:26. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ

Метки
l2phx, скрипты

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Скрипт] Скрипты для RFRudokop. Vizir Rising Force Online 13 15.07.2009 00:10
[Файл] l2phx.3.4.1.70 ZliLO Скрипты и перехват пакетов 7 05.04.2009 23:25
[Руководство] Нейтральные скрипты maxxx Архив Warcraft 3 0 11.11.2008 21:22
Скрипты для Рудокопа Chopa Архив уязвимостей 1 16.07.2008 17:32

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

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

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