Page 1 of 1

Out Of Range

Posted: 15.10.2012 18:07
by untouch
Добрый день,
подскажите в чем может быть проблема?

Code: Select all

...
var
...
i, tmp : integer;
treetile: array [0..15] of word;
treecoord: array [0..35] of tfoundtile;

procedure init_tree;
begin
treetile[0]:= 3293;
treetile[1]:= 3290;
treetile[2]:= 3286;
treetile[3]:= 3288;
treetile[4]:= 3288;
treetile[5]:= 3293;
treetile[6]:= 3280;
treetile[7]:= 3280;
treetile[8]:= 3296;
treetile[9]:= 3277;
treetile[10]:= 3293;
treetile[11]:= 3296;
treetile[12]:= 3290;
treetile[13]:= 3290;
treetile[14]:= 3288;
treetile[15]:= 3288;
treetile[16]:= 3280;
treetile[17]:= 3277;
treetile[18]:= 3290;
treetile[19]:= 3302;
treetile[20]:= 3283;
treetile[21]:= 3290;
treetile[22]:= 3283;
treetile[23]:= 3283;
treetile[24]:= 3296;
treetile[25]:= 3293;
treetile[26]:= 3277;
treetile[27]:= 3283;
treetile[28]:= 3293;
treetile[29]:= 3293;
treetile[30]:= 3296;
treetile[31]:= 3280;
end;

procedure changetree;
begin
treecoord[0].x:= 1500;
treecoord[0].y:= 1110;
treecoord[1].x:= 1500;
treecoord[1].y:= 1113;
treecoord[2].x:= 1512;
treecoord[2].y:= 1107;
treecoord[3].x:= 1512;
treecoord[3].y:= 1110;
treecoord[4].x:= 1552;
treecoord[4].y:= 1095;
treecoord[5].x:= 1552;
treecoord[5].y:= 1098;
treecoord[6].x:= 1564;
treecoord[6].y:= 1089;
treecoord[7].x:= 1564;
treecoord[7].y:= 1092;
treecoord[8].x:= 1576;
treecoord[8].y:= 1086;
treecoord[9].x:= 1576;
treecoord[9].y:= 1089;
treecoord[10].x:= 1608;
treecoord[10].y:= 1080;
treecoord[11].x:= 1608;
treecoord[11].y:= 1083;
treecoord[12].x:= 1620;
treecoord[12].y:= 1089;
treecoord[13].x:= 1620;
treecoord[13].y:= 1092;
treecoord[14].x:= 1632;
treecoord[14].y:= 1095;
treecoord[15].x:= 1632;
treecoord[15].y:= 1098;
treecoord[16].x:= 1644;
treecoord[16].y:= 1080;
treecoord[17].x:= 1644;
treecoord[17].y:= 1083;
treecoord[18].x:= 1612;
treecoord[18].y:= 1059;
treecoord[19].x:= 1612;
treecoord[19].y:= 1062;
treecoord[20].x:= 1604;
treecoord[20].y:= 1053;
treecoord[21].x:= 1604;
treecoord[21].y:= 1056;
treecoord[22].x:= 1600;
treecoord[22].y:= 1047;
treecoord[23].x:= 1600;
treecoord[23].y:= 1050;
treecoord[24].x:= 1588;
treecoord[24].y:= 1044;
treecoord[25].x:= 1588;
treecoord[25].y:= 1047;
treecoord[26].x:= 1584;
treecoord[26].y:= 1047;
treecoord[27].x:= 1584;
treecoord[27].y:= 1050;
treecoord[28].x:= 1572;
treecoord[28].y:= 1032;
treecoord[29].x:= 1572;
treecoord[29].y:= 1035;
treecoord[30].x:= 1560;
treecoord[30].y:= 1017;
treecoord[31].x:= 1560;
treecoord[31].y:= 1020;
end;

procedure chop;
begin
init_tree;
changetree;
for j:=tmp to tmp+1 do //вот тут по-моему беда, только я никак не пойму вчем конкретно ошибка
begin
repeat
if targetpresent then canceltarget;
wait(500);
if warmode = true then setwarmode(false);
ctime := Now;
waittargettile(treetile[j], treecoord[j].x, treecoord[j].y, 0);
useobject(objatlayerex(Lhandlayer,self));
wait(500);
z := 0;
repeat 
wait(100); 
z := z + 1; 
m0 := injournalbetweentimes(mes0, ctime, Now);
m1 := injournalbetweentimes(mes1, ctime, Now); 
m2 := injournalbetweentimes(mes2, ctime, Now); 
m3 := injournalbetweentimes(mes3, ctime, Now); 
m4 := injournalbetweentimes(mes4, ctime, Now); 
m5 := injournalbetweentimes(mes5, ctime, Now); 
until (m0<>-1) or (m1<>-1) or (m2<>-1) or (m3<>-1) or (m4<>-1) or (m5<>-1) or Dead or (z > 50);
until (m2<>-1) or (m3<>-1) or (m4<>-1);

end;
tmp:=tmp+1; 
end;

Begin
setarstatus(true);
while not dead do
begin
tmp := 0;
...
chop;
end;
end;
End.

Re: Out Of Range

Posted: 15.10.2012 22:15
by Vizit0r

Re: Out Of Range

Posted: 16.10.2012 8:20
by untouch
я читал этот топ, прошу указать мне почему не работает мой цикл?

Code: Select all

for j:=tmp to tmp+1 do
вот тут я неправильно его организовал?

Re: Out Of Range

Posted: 16.10.2012 9:14
by Vizit0r
ты смотри на верхнюю границу.
чтобы не стало у тебя j = 32 и тогда при обращении к массивам деревьев может как раз и вылететь ошибка.

Re: Out Of Range

Posted: 16.10.2012 9:35
by untouch
я хотел таким способом задать правильный цикл

объясню логику скрипта:
в рунбуке 16 рун, каждая точка из рун которых имеет два дерева, которые надо прорубать, итого имеем 32 дерева
решил ввести переменную tmp, которая вытаскивала бы правильные два индекса из массива (два дерева), таким образом чтобы было
1 точка: от 0 до 1
2 точка: от 2 до 3
...
16 точка: от 30 до 31

Code: Select all

tmp:=0
for i:= 0 to 15 // осн цикл
...
for j:= tmp to tmp+1 // цикл для "двух" деревьев
...
end;
tmp:= tmp+1
end;
т.е. j никак не станет 32 из-за его обнуления
хоть я и понимаю, что сам скрипт не ставит циклу явные четкие рамки для верхней границы
а как тогда можно сделать еще?

Re: Out Of Range

Posted: 16.10.2012 16:33
by Vizit0r
ну если обнуляется перед входом в процедуру - то надо смотреть на работу скрипта.
падает всегда в одном месте, или случайно?

Re: Out Of Range

Posted: 16.10.2012 17:02
by untouch
да, падает сразу перед началом рубки 1-го древа

Re: Out Of Range

Posted: 16.10.2012 17:10
by untouch
пардон, только что перепроверил метками, падает перед чтением процедуры
ошибку пока одну нашел, размерность массива не верно указана была :oops:

Re: Out Of Range

Posted: 16.10.2012 22:21
by Vizit0r
ну так на отладке пошаговкой смотри, где именно падает.

Re: Out Of Range

Posted: 17.10.2012 15:25
by untouch
ппц, все работает
ошибка была в размерности массива, указал вместо 32 16 элементов...
спс за подсазки :lol:

Re: Out Of Range

Posted: 17.10.2012 16:25
by Vizit0r
а, ну да)
я туда и не смотрел.