Jump to content

Recommended Posts

Posted

Hello. I used this script bellow, on 3.5.34.176 l2ph version and get a syntax error, where ''function StrToHex(packet: string):string;'' set -> Identifier redeclared. Can someone help me to fix it?

 

const

  Name='Sagitarius'; // character

  ItemID=6595; // item id

  LifeID=8762; // lifestone id

  GemsID=2131; // gemstone id

  GemsAmount=25; //gemstone amount

  max=8000;  // max amount of gemstones

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:=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) div 16;

    result:=result+ByteToHex(tmp);

    tmp:=ord(packet) - 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>'+

  '</body></html>');

//  '<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<>0) then begin

      Result:=LifeBase;

      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.

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...