[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: [CJIABGO]_86hp  
Скрипты для l2phx
[CJIABGO]_86hp
Среда, 28.09.2011, 12:45 | Сообщение # 1
Модераторы
Сообщений: 12
-
14
+
14
Группа:
Награды:
0
Предлогаю выкладывать сюда рабочие скрипты

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

Добавлено (28.09.2011, 12:45)
---------------------------------------------
Скрипт для Аугментация в одно нажатие, работает на любых версиях.

Code
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

-------------------------------------------

Скрипт на Авто-таргет ПК, тестилось на L2J и L2F серверах
Code
// Авторы: 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 из 1
  • 1
Поиск: