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

Only working scripts
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

ответь пожалуйста
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);
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

тяжело найти проблему по твоим отрывкам чернобелого скрипта :)

скопируй сюда функцию в которой проблема и поставь комментарий на той же строке где вылетает скрипт
по такому примеру

Code: Select all

procedure poisk_tree; 
begin 
  SetArStatus(true);
  init; //ВЫЛЕТАЕТ ТУТ
  sum:=0;  
end;
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

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;
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

судя по всему в массиве RegArr меньше элементов чем в цикле итераций

и кстати обрати внимание у тебя цикл обновляет переменную i а в той строке используется j
Last edited by Alex on 02.05.2011 21:52, edited 1 time in total.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

в предыдущем посте я написал процедуру init в ней задается массив. он настолько просто что невозможно его протупить даже для меня. и повторюсь программка работает проходит эту процедуру и дальше идет, но при возвращении в цикле на эту же функцию вылетает ошибка.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

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; 
смотри твоя функция инит заполнят только нулевой индекс в RegArr, а когда в j приходит 1 у тебя падает скрипт
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

эмм мно у меня он не приходит в 1 там i стоит а не J
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

а j точно из нолика на втором проходе не превращается в 1?

rs:=GetStaticTilesArray(RegArr[j].minX,RegArr[j].minY,RegArr[j].maxX,RegArr[j].maxY,1,TreeTile,tfta);

3 раза вон вижу j
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

чпасибо))))
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

помогите плиз у меня чар не хочет реагировать на появление стража Энта когда рублю лес. как только он видит Ent или is attacking you он должен прерывать всю работу и включать процедуру убегания ubegalka; . Но ему пофиг на энта. Я тут много лишнего убрал. сама по себе процедура ubegalka; работает нормально.


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;
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

зачем использовать строку
OOPS !!! It isn''t a tree, it''s an Ent
целиком?
фразы "an Ent" будет вполне достаточно
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

хм щас попробую. днем почему-то на серваке энты не водятся. да и строку эту я полностью удалял тот же эфект был.
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

зачем ждать энта, днем можеш просто чаром сказать "an Ent", скрипт испугается и побежит :)
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Post by shinma »

рррррррр это будет неестествено. Хочу в реальной среде обитания проверить.
aalexx
Novice
Novice
Posts: 69
Joined: 06.02.2012 20:43
Location: Латвия\Англия
Contact:

Re: DRW Lumber Без гвард зоны (outside guard zone) V 1.0

Post by aalexx »

Спасибо! Кое что использовал из твоего скрипта!
Post Reply