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

Сброс в банк. Работает, но не стабильно

тут можно задать вопрос по скриптингу
Post Reply
Zampi
Neophyte
Neophyte
Posts: 14
Joined: 07.01.2011 8:13
Location: RU

Сброс в банк. Работает, но не стабильно

Post by Zampi »

Делаю себе скрипт на мининг, все ок — работает, но при выгрузке в банк каждый 3-4-й раз вылетает (скрипт выключается)

Code: Select all

20:57:12:452 [duper1]: Out Of Range at 45.1038
20:57:12:465 [duper1]: Script mining.sc stopped successfuly

Code: Select all


function DeliveryBank(x,y : Word):integer;
  var 
    bankposx, bankposy : integer;
    bankIdTemp, Bank, CurIngot : Cardinal;
    i, CurIndex : shortInt;
    oreType : array of Word;
    var ore: TStringList; 
  begin
    oreType := [$19B7,$19BA,$19B9,$19B8];
    bankIdTemp := bankId;   
    NewMoveXY(GetX(bankIdTemp),GetY(bankIdTemp),false,1,true);
    UseObject(bankIdTemp);
    Bank:=ObjAtLayer(BankLayer);
    if Bank <> 0 then begin
      for i:=0 to Length(oreType) - 1 do
        if (FindType(oreType[i], Backpack) > 0) then begin
          try
            ore := TStringList.Create;
            if GetFindedList(ore) = False then begin
              Result := 0;
            end else begin
              CurIndex := 0; 
              while CurIndex < FindCount do begin
                if Dead or not Connected then Exit;
                uosay(inttostr(FindCount));
                CurIngot := StrToInt('$' + ore.Strings[CurIndex]);
                if MoveItem(CurIngot, GetQuantity(CurIngot), Bank, $FFFF, $FFFF, 0) then inc(curIndex);
                wait(2000);
              end;
            end;
          finally
            ore.free;
          end;  
        end;
      end;
      NewMoveXY(x,y,false,1,true);
      result := 0;
    end;  
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: Сброс в банк. Работает, но не стабильно

Post by CFA »

1) Вместо Length(oreType) - 1 надо использовать getArrayLength(oreType) - 1
2) while CurIndex < FindCount do begin - лучше так - while CurIndex < ore.Count do begin
Zampi
Neophyte
Neophyte
Posts: 14
Joined: 07.01.2011 8:13
Location: RU

Post by Zampi »

спасибо! Твой ответ помог найти ошибку. Она оказалась в функции поиска пути
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Post by Fenix »

Кстати, в PS есть косяк с циклом for. В некоторых случаях, когда цикл должен выполнить только одну итерацию, выполняется ещё лишняя итерация. Как следствие, могут быть ошибки по доступу к элементам коллекций с подобными "Out Of Range".
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
Post Reply