Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Парсер строк результата функции GetGumpFullLines

Only working scripts
Post Reply
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Парсер строк результата функции GetGumpFullLines

Post by Vizit0r »

вот собственно парсер, который юзает РБ, берет от гампа GetGumpShortLines, и из полученного StringList выдирает нужные данные.
В данном случае - писался для шарда НДВ, получает returnvalue кнопки в первой функции, и общее кол-во рун во второй.

Code: Select all

function GetButtonNumFromRBForRune(RBID : Cardinal; runeNum : Byte) : Word;
var GumpLines : TStringList;
    GumpsCount : Byte;
    i : Word;
    a : String;
    ButtonStringStart,Butt_Num : Word;
    stime : TDateTime;
begin
  GumpLines := TStringList.Create;
If GetGumpsCount > 0 then
  if GetGumpSerial(GetGumpsCount-1) = $15A7DDF then
    CloseSimpleGump(GetGumpsCount-1);
  GumpsCount := GetGumpsCount;
  stime := Now;
  UseObject(RBID);
  repeat
//    CheckSave;
    InJournalBetweenTimes('too far|lost your', stime, Now);
    wait(50);
  until (LineCount > 0) or (GetGumpsCount <> GumpsCount) or (Now > stime + (1.0/1440)) or Dead;
  GetGumpShortLines(GetGumpsCount-1,GumpLines);
  for i := 0 to GumpLines.Count -1 do
    IF GumpLines.Strings[i] = 'GumpButtons: X   Y   Released_ID  Pressed_ID   Quit   Page_ID   Return_value   Page' then
      begin
        ButtonStringStart := i ;   
        Break;
      end;
  for i := ButtonStringStart+1 to GumpLines.Count-1 do
    begin   
      a := Copy(GumpLines.Strings[i],Pos('  1  0  ',GumpLines.Strings[i])+8,Length(GumpLines.Strings[i])-1);
      Delete(a,Pos(' ',a),Length(a));
      Butt_Num := StrToInt(a);
      IF ((Butt_Num > 600) and (Butt_Num < 700)) and (StrToInT(Copy(GumpLines.Strings[i],1,Pos(' ',GumpLines.Strings[i])-1)) = runeNum) then 
	  begin
	    Result := Butt_Num;
  	    Break;
 	  end;
      IF i = GumpLines.Count-1 then 
        Break;
    end;                   
  GumpLines.Free;
end;

function GetRunesCount(RBID : Cardinal) : Byte;
var GumpLines : TStringList;
    GumpsCount : Byte;
    i : Word;
    NameStringStart,NameStringEnd : Word;
begin
If GetGumpsCount > 0 then
  if GetGumpSerial(GetGumpsCount-1) = $15A7DDF then
    CloseSimpleGump(GetGumpsCount-1);
GumpLines := TStringList.Create;
GumpsCount := GetGumpsCount;
UseObject($64B9FF5A);
While GetGumpsCount = GumpsCount do
wait(50); 
GetGumpShortLines(GetGumpsCount-1,GumpLines);
for i := 0 to GumpLines.Count -1 do
  IF GumpLines.Strings[i] = 'Set Default' then
    begin
      NameStringStart := i+2 ;   
      Break;
    end;
for i := NameStringStart to GumpLines.Count -1 do
  IF GumpLines.Strings[i] = 'Recall' then
    begin
      NameStringEnd := i ;   
      Break;
    end;
Result := NameStringEnd -NameStringStart;
GumpLines.Free;
end;

procedure CheckLag; 
var starttime : TDateTime;
i: integer; 
begin 
i:=0;
while connected do
begin
starttime := Now; 
ClickOnObject(backpack); 
repeat 
 wait(50); 
 i:=i+1;
until (InJournalBetweenTimes('backpack', starttime, Now)<>-1) or (i>=200);
if i>=200 then i:=0 else exit;
end; 
end;
писал для себя, никаких комментов - потому что лазить и править не собирался никогда в жизни :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
randomnoob
Neophyte
Neophyte
Posts: 30
Joined: 10.04.2008 22:26

Post by randomnoob »

кто может объяснить работу этого скрипта?

Code: Select all

function GetButtonNumFromRBForRune(RBID : Cardinal; runeNum : Byte) : Word;
var GumpLines : TStringList;
    GumpsCount : Byte;
    i : Word;
    a : String;
    ButtonStringStart,Butt_Num : Word;
    stime : TDateTime;
begin
  GumpLines := TStringList.Create;
  //  закрываем гамп, если есть
If GetGumpsCount > 0 then
  if GetGumpSerial(GetGumpsCount-1) = $15A7DDF then
    CloseSimpleGump(GetGumpsCount-1);
  // юзаем РБ и ждем пока откроется
  GumpsCount := GetGumpsCount;
  stime := Now;
  UseObject(RBID);
  repeat
//    CheckSave;
    InJournalBetweenTimes('too far|lost your', stime, Now);
    wait(50);
  until (LineCount > 0) or (GetGumpsCount <> GumpsCount) or (Now > stime + (1.0/1440)) or Dead;
а дальше, хоть убейте - нифига непонятно

Code: Select all

 GetGumpShortLines(GetGumpsCount-1,GumpLines);
  for i := 0 to GumpLines.Count -1 do
    IF GumpLines.Strings[i] = 'GumpButtons: X   Y   Released_ID  Pressed_ID   Quit   Page_ID   Return_value   Page' then
      begin
        ButtonStringStart := i ;   
        Break;
      end;
  for i := ButtonStringStart+1 to GumpLines.Count-1 do
    begin   
      a := Copy(GumpLines.Strings[i],Pos('  1  0  ',GumpLines.Strings[i])+8,Length(GumpLines.Strings[i])-1);
      Delete(a,Pos(' ',a),Length(a));
      Butt_Num := StrToInt(a);
      IF ((Butt_Num > 600) and (Butt_Num < 700)) and (StrToInT(Copy(GumpLines.Strings[i],1,Pos(' ',GumpLines.Strings[i])-1)) = runeNum) then
     begin
       Result := Butt_Num;
         Break;
      end;
      IF i = GumpLines.Count-1 then
        Break;
    end;                   
  GumpLines.Free;
end;

function GetRunesCount(RBID : Cardinal) : Byte;
var GumpLines : TStringList;
    GumpsCount : Byte;
    i : Word;
    NameStringStart,NameStringEnd : Word;
begin
If GetGumpsCount > 0 then
  if GetGumpSerial(GetGumpsCount-1) = $15A7DDF then
    CloseSimpleGump(GetGumpsCount-1);
GumpLines := TStringList.Create;
GumpsCount := GetGumpsCount;
UseObject($64B9FF5A);
While GetGumpsCount = GumpsCount do
wait(50);
GetGumpShortLines(GetGumpsCount-1,GumpLines);
for i := 0 to GumpLines.Count -1 do
  IF GumpLines.Strings[i] = 'Set Default' then
    begin
      NameStringStart := i+2 ;   
      Break;
    end;
for i := NameStringStart to GumpLines.Count -1 do
  IF GumpLines.Strings[i] = 'Recall' then
    begin
      NameStringEnd := i ;   
      Break;
    end;
Result := NameStringEnd -NameStringStart;
GumpLines.Free;
end;
SaNeK
Novice
Novice
Posts: 65
Joined: 08.09.2008 9:52
Contact:

Post by SaNeK »

Ну судя по написаному, получает номер кнопки для гампа рун буки по айди буки и номеру рунки.
Ну а 2я фуя получает ко-во рунок в рунбуке.
А в конце проверка на лаги )
А эту страничку знаешь http://stealth.od.ua/forum/viewtopic.php?t=1220 там все есть )
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

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

ну уж нет. избранные места давай, которые непонятны.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply