Page 1 of 1

Подскажите пожалуйста

Posted: 14.03.2012 11:20
by Tomers
Стелс выдает ошибку
Exception: List index out of bounds (1) at 0.1095
и закрывает скрипт.

Ошибка где-то в этом куске кода, но не могу понять что не так:

Code: Select all

while count(item_1)>0 do begin
    b:=TStringList.Create; 
    UseObject($00000357);
    for timer_1:=0 to 15 do wait(200);             
    GetGumpTextLines(GetGumpsCount-1,b);
    if b.strings[1]=stroka then proc_1;
    CloseSimpleGump(0);
    b.free;
end;

Re: Подскажите пожалуйста

Posted: 14.03.2012 11:25
by nepopus

Code: Select all

if b[1]=stroka then proc_1;

Re: Подскажите пожалуйста

Posted: 14.03.2012 11:27
by Tomers
nepopus wrote:if b[1]=stroka then proc_1;
Это проверка на соответствие гампа нужным требованиям. Вычитывает строку и сравнивает. Как переписать? Хотя я не думаю что тут в этом именно бок, думал что может где-то с парой:

Code: Select all

b:=TStringList.Create;
...
b.free;

Re: Подскажите пожалуйста

Posted: 14.03.2012 11:29
by nepopus
Tomers wrote:
nepopus wrote:if b[1]=stroka then proc_1;
Это проверка на соответствие гампа нужным требованиям. Вычитывает строку и сравнивает. Как переписать? Хотя я не думаю что тут в этом именно бок, думал что может где-то с парой:

Code: Select all

b:=TStringList.Create;
...
b.free;
я вроде ошибку написал = ) не b.strings[1], а просто b[1] возвращает нужную строку textlines.
Если можно и так и так, то сорри : ) других ошибок не вижу.

Re: Подскажите пожалуйста

Posted: 14.03.2012 11:39
by Tomers
Тоесть изменить:

Code: Select all

 if b.strings[1]=stroka then proc_1;
на

Code: Select all

 if b[1]=stroka then proc_1;
и все?

Re: Подскажите пожалуйста

Posted: 14.03.2012 11:44
by nepopus
и меня практически также работает рунбука, и работает неплохо.

Code: Select all

    stringlist := tstringlist.create;
      while isgump do closesimplegump(0);
      usetype(runebooktype, runebookcolor);
      wait(300);
      getgumptextlines(0, stringlist);
      count := copy(stringlist[12], 10, length(stringlist[12]));
      if strtoint(count) < 30 then addtosystemjournal('Мужик! У меня в рунбуке мало зарядов: ' + count);
      numgumpbutton(0, buttonnum);
    stringlist.free;

Re: Подскажите пожалуйста

Posted: 14.03.2012 15:27
by Tomers
Не помогло. Всеравно выкидывает:

Exception: List index out of bounds (1) at 0.1185

Час нормально работало, а потом снова. :x

Re: Подскажите пожалуйста

Posted: 14.03.2012 15:49
by nepopus
Tomers wrote:Не помогло. Всеравно выкидывает:

Exception: List index out of bounds (1) at 0.1185

Час нормально работало, а потом снова. :x
что используешь? и какое меню появляется. может оно не всегда появляется? Потому что если его не будет, то 100% вылет. попробуй проверку добавь.

Re: Подскажите пожалуйста

Posted: 14.03.2012 15:53
by Tomers
что используешь? и какое меню появляется. может оно не всегда появляется? Потому что если его не будет, то 100% вылет. попробуй проверку добавь.
Ааааа. Семен семеныч, вот это мне и нужно было узнать! Значит нужно делать проверку Isgump и всего делов.

Re: Подскажите пожалуйста

Posted: 14.03.2012 17:14
by Vizit0r
на наличие гампа само собой.
а потом еще

Code: Select all

if (b.Count > 0) and (b.strings[1]=stroka) then proc_1;
так оно правильнее.

Re: Подскажите пожалуйста

Posted: 31.03.2012 12:14
by Tomers
Vizit0r wrote:на наличие гампа само собой.
а потом еще

Code: Select all

if (b.Count > 0) and (b.strings[1]=stroka) then proc_1;
так оно правильнее.
Апнул старую тему.
Делаю проверку на наличие гампа. Ловил выплонение каждой строки, что заняло много времени, потому как ошибка может не выбиваться сутками.
Вот в этом куске кода:

Code: Select all

CloseSimpleGump(0);
CloseSimpleGump(0);
b:=TStringList.Create;
a:=GetGumpsCount;
UseObject($00000357);   //разговор с NPC, выдает гамп с названием квеста, которое нужно распознать.
for timer_1:=0 to 20 do begin
      if GetGumpsCount>a then break;
      wait(150);
end;
if GetGumpsCount>0 then begin
      GetGumpTextLines(GetGumpsCount-1,b);      //вылетает именно на этой строке. проверял "addtosystemjournal"
      if b.strings[1]=stroka then proc_1;             
      CloseSimpleGump(0);
      b.free;
end;
Ошибку выбивает именно при вычитывании строк из гампа квеста.
Оговорюсь сразу, что сейв мира проверяю далее по 30-ти секундному предупреждению и ставлю wait(40000), а сам цикл даже с запуском proc_1; занимает не более 6-ти секунд.
Скрипт может работать сутки и все будет нормально, либо выдать ошибку через 10-20 минут работы.

Re: Подскажите пожалуйста

Posted: 31.03.2012 13:16
by Vizit0r
конечно выбивает. потому что стринглист пустой, а ты из него пытаешься вытащить строку для проверки. проверки на наличие строк в списке ведь нет.

что характерно, процитировал мое сообщение, где как раз было

Code: Select all

if (b.Count > 0) ...