В данном случае - писался для шарда НДВ, получает 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;
