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

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

тут можно задать вопрос по скриптингу
Post Reply
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

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

Post 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;
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

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

Post by nepopus »

Code: Select all

if b[1]=stroka then proc_1;
Last edited by nepopus on 14.03.2012 11:30, edited 1 time in total.
<( o_O<) <( O_O )> (>O_o )>
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

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

Post by Tomers »

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

Code: Select all

b:=TStringList.Create;
...
b.free;
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

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

Post 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.
Если можно и так и так, то сорри : ) других ошибок не вижу.
<( o_O<) <( O_O )> (>O_o )>
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

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

Post by Tomers »

Тоесть изменить:

Code: Select all

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

Code: Select all

 if b[1]=stroka then proc_1;
и все?
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

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

Post 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;
<( o_O<) <( O_O )> (>O_o )>
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

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

Post by Tomers »

Не помогло. Всеравно выкидывает:

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

Час нормально работало, а потом снова. :x
nepopus
Novice
Novice
Posts: 121
Joined: 29.02.2012 23:45
Location: Москва
Contact:

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

Post by nepopus »

Tomers wrote:Не помогло. Всеравно выкидывает:

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

Час нормально работало, а потом снова. :x
что используешь? и какое меню появляется. может оно не всегда появляется? Потому что если его не будет, то 100% вылет. попробуй проверку добавь.
<( o_O<) <( O_O )> (>O_o )>
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

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

Post by Tomers »

что используешь? и какое меню появляется. может оно не всегда появляется? Потому что если его не будет, то 100% вылет. попробуй проверку добавь.
Ааааа. Семен семеныч, вот это мне и нужно было узнать! Значит нужно делать проверку Isgump и всего делов.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

на наличие гампа само собой.
а потом еще

Code: Select all

if (b.Count > 0) and (b.strings[1]=stroka) then proc_1;
так оно правильнее.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

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

Post 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 минут работы.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

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

Post by Vizit0r »

конечно выбивает. потому что стринглист пустой, а ты из него пытаешься вытащить строку для проверки. проверки на наличие строк в списке ведь нет.

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

Code: Select all

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