Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
DRW Lumber Без гвард зоны (outside guard zone) V 1.0
ответь пожалуйста
function GetStaticTilesArray(Xmin,Ymin,Xmax,Ymax: Word; WorldNum: Byte; TileType: Word; var FoundTilesArray: TFoundTilesArray): Word; // Получение массива статик тайлов по типу
TFoundTile = record
X : SmallInt;
Y : SmallInt;
Z : ShortInt;
Tile : Word;
end;
type TFoundTilesArray = array[0..999] of TFoundTile;
SetLength(tfta,0);
эта команда обнулила массив tfta?
rs:=GetStaticTilesArray(RegArr[j].minX,RegArr[j].minY,RegArr[j].maxX,RegArr[j].maxY,1,TreeTile,tfta);
function GetStaticTilesArray(Xmin,Ymin,Xmax,Ymax: Word; WorldNum: Byte; TileType: Word; var FoundTilesArray: TFoundTilesArray): Word; // Получение массива статик тайлов по типу
TFoundTile = record
X : SmallInt;
Y : SmallInt;
Z : ShortInt;
Tile : Word;
end;
type TFoundTilesArray = array[0..999] of TFoundTile;
SetLength(tfta,0);
эта команда обнулила массив tfta?
rs:=GetStaticTilesArray(RegArr[j].minX,RegArr[j].minY,RegArr[j].maxX,RegArr[j].maxY,1,TreeTile,tfta);
тяжело найти проблему по твоим отрывкам чернобелого скрипта
скопируй сюда функцию в которой проблема и поставь комментарий на той же строке где вылетает скрипт
по такому примеру
скопируй сюда функцию в которой проблема и поставь комментарий на той же строке где вылетает скрипт
по такому примеру
Code: Select all
procedure poisk_tree;
begin
SetArStatus(true);
init; //ВЫЛЕТАЕТ ТУТ
sum:=0;
end;
Code: Select all
procedure poisk_tree;
begin
SetArStatus(true);
init;
sum:=0;
// поиск деревьев и составление массива
arr_sum:=0;
for i:=0 to 9 do
begin
rs:=GetStaticTilesArray(RegArr[j].minX,RegArr[j].minY,RegArr[j].maxX,RegArr[j].maxY,1,TreeTile[i],tfta);
//вылетает тут
if rs>0 then
for k:=0 to rs-1 do temp[arr_sum+k]:=tfta[k];
arr_sum:=arr_sum+rs;
end;
QuickSort(temp,arr_sum,start_p);
for k:=0 to arr_sum-1 do res_arr[sum+k]:=temp[k];
sum:=sum+arr_sum;
end;
судя по всему в массиве RegArr меньше элементов чем в цикле итераций
и кстати обрати внимание у тебя цикл обновляет переменную i а в той строке используется j
и кстати обрати внимание у тебя цикл обновляет переменную i а в той строке используется j
Last edited by Alex on 02.05.2011 21:52, edited 1 time in total.
Code: Select all
procedure init;
begin
start_p.X:=GetX(Self); //Стартовая координата игрока
start_p.Y:=GetY(Self); //Стартовая координата игрока
//Tile Tree
TreeTile[0]:=3283;
TreeTile[1]:=3277;
TreeTile[2]:=3293;
TreeTile[3]:=3296;
TreeTile[4]:=3302;
TreeTile[5]:=3299;
TreeTile[6]:=3290;
TreeTile[7]:=3288;
TreeTile[8]:=3286;
TreeTile[9]:=3280;
//Рубить в области +/- 30 клеток от Стартовой координаты игрока
RegArr[0].minX:=start_p.X-10;
RegArr[0].minY:=start_p.Y-10;
RegArr[0].maxX:=start_p.X+10;
RegArr[0].maxY:=start_p.Y+10;
end;
помогите плиз у меня чар не хочет реагировать на появление стража Энта когда рублю лес. как только он видит Ent или is attacking you он должен прерывать всю работу и включать процедуру убегания ubegalka; . Но ему пофиг на энта. Я тут много лишнего убрал. сама по себе процедура ubegalka; работает нормально.
i:=0;
i:=0;
Code: Select all
procedure ubegalka;
begin
if i<6 then
begin
NewMoveXY(dot[i].X,dot[i].Y,true,1,false);
AddToSystemJournal('точка '+(inttostr(i))+' пройдена.');
i:=i+1;
CharDead;
end
else
begin
i:=0;
NewMoveXY(dot[i].X,dot[i].Y,true,1,false);
AddToSystemJournal('точка повтора '+(inttostr(i))+' пройдена.');
i:=i+1;
CharDead;
end;
end;
procedure Chop(f_tile:TFoundTile);
var
ctime : TDateTime;
iter_max:integer;
next_lumb,lumb_result,wait_lumb: string;
fizzles:word;
begin
wait_lumb:=l_fizzles+'|'+l_needwait;
next_lumb:=l_nothing1+'|'+l_nothing2+'|'+l_far+'|'+l_see;;
lumb_result:=wait_lumb+'|'+next_lumb+'|'+l_success+'|'+l_elemental+'|'+l_bad+'|'+l_heavy;
fizzles:=0;
repeat
equip_tool(hatcher,LhandLayer);
cancel;
iter_max:=0;
check_hide;
UseObject(ObjAtLayer(LhandLayer));
check_hide;
Wait_Target(5000);
ctime := Now;
TargetToTile(f_tile.Tile,f_tile.X,f_tile.Y,f_tile.Z);
repeat
iter_max:=iter_max+1;
wait(2000);
checksave;
check_war;
check_hide;
if (InJournalBetweenTimes('OOPS !!! It isn''t a tree, it''s an Ent!!!|is attacking you|Ent', ctime, Now)>= 0) then
begin
Break;
end;
until (InJournalBetweenTimes(lumb_result, ctime, Now)>= 0) or (iter_max>10) or dead;
if (InJournalBetweenTimes(l_fizzles, ctime, Now)<>-1) then fizzles:=fizzles+1;
if (InJournalBetweenTimes('OOPS !!! It isn''t a tree, it''s an Ent!!!|is attacking you|Vas Corp Por|notice|Ent', ctime, Now)>= 0) or dead then
begin
ubegalka; //ВОТ ТУТ ОН ДОЛЖЕН УБЕЖАТЬ если условия выше увидят энта.
Break;
end;
until (InJournalBetweenTimes(next_lumb, ctime, Now)>= 0) or (fizzles>15) or dead;
CharDead;
end;
Re: DRW Lumber Без гвард зоны (outside guard zone) V 1.0
Спасибо! Кое что использовал из твоего скрипта!