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

Лесоруб/Lumber

Only working scripts
Lokkie
Neophyte
Neophyte
Posts: 30
Joined: 02.08.2006 7:55

Лесоруб/Lumber

Post by Lokkie »

Скрипт под РанУО (клилоки вместо сообщений в журнале)
Бегает по координатам, если перевес или отсутствуют топоры - бежит к дому затаривается.
Прошу прощения за то что скрипт не вычещен - руки не дошли. Надо иметь файл с тайлами и координаты ящиков (и их ИД)

Code: Select all

Program LumberBasic;
type LumberR = record
   tile:word;
   px,py,pz:integer;
end;

var
   LumberP: array [0..32] of LumberR;
   ItemCount,i,MaxWeight:Integer;
   Cli: array [0..8] of string;
   AxeType, oo, ii :word;
   out11 : boolean;
  
   
   {$Include 'all.inc'}

   procedure RestoreStamina;
// если стамины мало, восстанавливаем ее чару до полной
begin
   if Stam < 20 then
   begin
      repeat
         waitconnection(3000);
         wait(1000);
      until Stam = MaxStam;
   end;
end;

Procedure Go_Home;
VAR


resourse: array [0..4] of word;
Box_Drova,Box_Topory : cardinal;
HatchetCC, hatch : integer;

begin
axeType:=$0f43;
Box_Drova := $4008C115;
Box_Topory := $400BCC4A;
HatchetCC :=5;
resourse[0] :=$1BDD; //wood
resourse[1] :=$0F85; //gs
resourse[2] :=$0F25; //amber
resourse[3] :=$0F2D; // tourn
resourse[4] :=$0F86; //mr
newMoveXY(2553,768,False,0,false);
useobject(Box_Topory);
wait(1000);
hatch := count(AxeType);
 Addtosystemjournal('At the start I have '+intToStr(hatch)+' hatchets!');
while (hatch<HatchetCC) do
	 begin	
	  findtype(Axetype,Box_Topory);
	   grab(finditem,1);
	    wait(800);
	     hatch := count(AxeType);
	      Addtosystemjournal('I have '+intToStr(hatch)+' hatchets!');
	 end;
  useobject(Box_Drova);
   wait(1000);
for i:= 0 to 4 do
 begin
   while (getquantity(findtype(resourse[i],Backpack))>0) do
    begin
     moveitem(finditem,0,Box_Drova,0,0,0);
      wait(1000);
    end;
  end;
end;

Procedure GetLumberTiles(s:String;WPos:Integer);
begin
   s := s + ' ';
   LumberP[WPos].tile:=StrToInt(Copy(s,1,Pos(' ',s)-1));
   Delete(s,1,Pos(' ',s));
   LumberP[WPos].px:=StrToInt(Copy(s,1,Pos(' ',s)-1));
   Delete(s,1,Pos(' ',s));
   LumberP[WPos].py:=StrToInt(Copy(s,1,Pos(' ',s)-1));
   Delete(s,1,Pos(' ',s));
   LumberP[WPos].pz:=StrToInt(Copy(s,1,Pos(' ',s)-1));
   Delete(s,1,Pos(' ',s));
end;

Procedure GetCoord;
var
   List:TStringList;
   i:integer;
begin
   List:=TStringList.Create;
   List.LoadFromFile('C:\Drovosek.txt');
   for i := 0 to List.Count-1 do
      GetLumberTiles(List.strings[i],i);
   ItemCount:=i;
end;


Function Lumber(tile:Word;x,y,z:Integer):boolean;
var
   FBegin:TDateTime;
begin
   FBegin:=Now;
  axeType:=$0f43;
Cli[0]:='cliloc# 0xA20D'; //Target cannot be seen. 
Cli[1]:='cliloc# 0xA30D'; //There's not enough wood here to harvest. 
Cli[2]:='cliloc# 0xA309'; //You can't use an axe on that.
Cli[3]:='cliloc# 0xA2E7'; //There isn't enough wood here
Cli[4]:='cliloc# 0xA2DE'; //That is too far away. 
Cli[5]:='cliloc# 0xA309'; //You can't use an axe on that.
Cli[6]:='cliloc# 0xA308'; //There's not enough wood here to harvest.
Cli[7]:='cliloc# 0xA311'; //You can't place any wood into your backpack!
Cli[8]:='cliloc# 0xA30D'; //There's not enough wood here to harvest.
 useobject(backpack);
 wait(3000);

 repeat
   begin
   
  if (getquantity(findtype(AxeType,backpack)) > 0) or (gettype(ObjAtLayer(RhandLayer)) = AxeType) then
    begin
    Usetype(AxeType,0);
     WaitTargetTile(tile,x,y,z);
       wait(3000);
    end
   else
    begin
    oo := gettype(ObjAtLayer(RhandLayer));
    ii := getquantity(findtype(AxeType,backpack));
    Addtosystemjournal('yo '+intToStr(oo)+'!');
     Addtosystemjournal('ya '+intToStr(ii)+'!');
     wait(500);
    end;


   end;
 until 
     (InJournalBetweenTimes(Cli[0], FBegin, Now) <> -1) 
  or (InJournalBetweenTimes(Cli[1], FBegin, Now) <> -1) 
  or (InJournalBetweenTimes(Cli[2], FBegin, Now) <> -1) 
  or (InJournalBetweenTimes(Cli[3], FBegin, Now) <> -1) 
  or (InJournalBetweenTimes(Cli[4], FBegin, Now) <> -1) 
  or (InJournalBetweenTimes(Cli[5], FBegin, Now) <> -1)
  or (InJournalBetweenTimes(Cli[6], FBegin, Now) <> -1)
  or (InJournalBetweenTimes(Cli[7], FBegin, Now) <> -1)
  or (InJournalBetweenTimes(Cli[8], FBegin, Now) <> -1)
  or (weight>400)
 if
   (InJournalBetweenTimes(Cli[7], FBegin, Now) <> -1)
or (weight>400)
or (getquantity(findtype(AxeType,backpack)) = 0)
 then
  result:=true //go home
 else
  result:=false; //go next
end;



begin
   SetArStatus(true);
   getcoord;
   while not dead do
   begin
    for i :=1 to 40 do
     begin
     Addtosystemjournal('I go here '+intToStr(LumberP[i].px)+', '+intToStr(LumberP[i].py)+'!');
     newMoveXY(LumberP[i].px,LumberP[i].py,false,1,false);
     out11 := Lumber(LumberP[i].tile,LumberP[i].px,LumberP[i].py,LumberP[i].pz);
       if out11 = true then
        Go_Home
       else
        begin
         Addtosystemjournal('Tree number '+intToStr(i)+'!');
	end;
      end;  
   end;
end. 
Vladimirus
Neophyte
Neophyte
Posts: 17
Joined: 12.11.2006 10:07
Contact:

Post by Vladimirus »

Хотелось бы узнать, как автор борется с упиранием чара в деревья - у меня увы сия проблема разрешения не нашла.
Lokkie
Neophyte
Neophyte
Posts: 30
Joined: 02.08.2006 7:55

Post by Lokkie »

Vladimirus wrote:Хотелось бы узнать, как автор борется с упиранием чара в деревья - у меня увы сия проблема разрешения не нашла.
к сожалению почти никак. Т.е. в ходилке стоит меньше неудачных повторений:

Code: Select all

ldc := ldc + 1;
            if ldc > 10 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end; 
в оригинале ldc > 100

поэтому поупиравшись чар бредет к следующему дереву, с надеждой что дойдет. Выход я понимаю тупой, но на что способен я то и пишу :oops:
Vladimirus
Neophyte
Neophyte
Posts: 17
Joined: 12.11.2006 10:07
Contact:

Post by Vladimirus »

все же лучше, чем выстривать вообще все координаты для шагов в ручную.
Macks
Apprentice
Apprentice
Posts: 250
Joined: 27.02.2006 22:23
Location: АоП - Age Of Power

Post by Macks »

Lokkie wrote:
Vladimirus wrote:Хотелось бы узнать, как автор борется с упиранием чара в деревья - у меня увы сия проблема разрешения не нашла.
к сожалению почти никак. Т.е. в ходилке стоит меньше неудачных повторений:

Code: Select all

ldc := ldc + 1;
            if ldc > 10 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end; 
в оригинале ldc > 100

поэтому поупиравшись чар бредет к следующему дереву, с надеждой что дойдет. Выход я понимаю тупой, но на что способен я то и пишу :oops:
Я так понял рубка на НД? А синтаксис требуемых файлов? Просто десятичные числа, по 1 в строке?
Дайте пожалуйста пример файлов и методику их создания.
Lokkie
Neophyte
Neophyte
Posts: 30
Joined: 02.08.2006 7:55

Post by Lokkie »

Macks wrote:Я так понял рубка на НД? А синтаксис требуемых файлов? Просто десятичные числа, по 1 в строке?
Дайте пожалуйста пример файлов и методику их создания.
Для НД (кстати, я там тоже Lokkie)
пример файла

Code: Select all

3290 2556 771 0
3277 2556 774 0
3299 2556 777 0
3296 2560 777 0
3290 2560 771 0
3299 2564 768 0
3290 2564 771 0
тайл - коорд Х - коорд У - коорд Z
прога для марченья пути (Инжект, прога (С) Don Spil)

Code: Select all

sub mark()
uo.deletejournal()
while not uo.injournal(uo.getname("self")+":",2)
uo.infotile()
wait(1700)
wend
end sub
Текст координат из окна в файл и убирание пустых строк - ручками. :roll:
SkvidvarD
Neophyte
Neophyte
Posts: 11
Joined: 27.09.2006 1:34
Location: Одесса-мама
Contact:

Post by SkvidvarD »

Я вот незнаю точно, хочу предложить проблему решение проблемы хождения. Моя идея, я думаю, вам даст пишу для размышления.
Как насчет группы координат хождения. Тоесть точка схода:
Чар идет в точку "А0" и проверяется .where если совпадает тогда он идет в точку "А1" и рубит дерево, потом в точку "А2" потом "А3". После вырубание 3 точек он идет в точку "А0" отмечаеться там и пилит скидывать дерево или на точку, но уже "Б0" там та же система.
Цель в том, чтобы зделать похождения бравого крафтера Швейка в точном направлении и без припятствий. Так он будет ходить в разные направления и рубить определенную групу деревьев. Причем можно еше сделать если игрок не двиагся в течении Н-ного времени, тоесть он уперсие в препятствие, что бы он его обходил, тоесть ходил по оси "х" и "у" на пару клеточек вниз-вверх, влево вправо...
Вот ппытаюсь схемку зделать
...............0
..0...0.....0......0......0.....0
0......................................0
......А0......В0..........Б0
........I.......I.............I
........I.......I.............I........0
........I.......I.............I.Г0......0
........I.......I.............I..I....0
.........\____\_....___/_/
.....................\ /
......................X
.................<===>
0 - нужное нам дерево
А0, Б0, В0, Г0 - пучковыо-сходные точки координаты
I, \, / -путь
<===> наша лодочка
X - наш сход с лодки и самая контрольная точка, если чтото нетак то возврашаються всегда в нее.
Вы несудите строго, что скрипт не написал, не научился еше, но может, я кому-то подам идею, или что-нибудь похожее. =)
И овцы целы, и волки сыты, и светлая память пастуху.
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Как еще можно сделать файл с тайлами? Инжект у нас не пашет...
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Sfairat wrote:Как еще можно сделать файл с тайлами? Инжект у нас не пашет...
http://stealth.od.ua/forum/viewtopic.php?p=6011#6011
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

Эм..
19:35:04 [Haxal-Lamber]: Compiler: [Error] (С форума Lamber.sc at 30:11): Duplicate identifier 'GOTOXY'
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Удали из скрипта процедуру
procedure GotoXY(x,y,prec : integer; runflag : boolean);
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

В смысле, а как он ходить будет? :?
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Duplicate identifier 'GOTOXY' - говорит о том что у тебя в Инклюдах уже есть функция с таким именем.
Sfairat
Neophyte
Neophyte
Posts: 44
Joined: 21.10.2009 18:15

Post by Sfairat »

21:27:48 [Haxal-Lamber]: I go here 975, 1415!
21:27:50 [Haxal-Lamber]: GotoXY: Cannot reach location!


Дошел до первого препятствия и все и встал...

Code: Select all

if ldc > 10 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end; 
Ldc кол-во попыток кажется не? вобшем не ходит...

Файл с тайлами такой:

Code: Select all

3293 980 1418 -82
3277 975 1415 -83
3280 981 1416 -82
3283 977 1414 -83
3296 979 1422 -83
3293 974 1422 -84
3299 974 1416 -83
3293 980 1413 -83
3277 978 1423 -83
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

Sfairat wrote:21:27:48 [Haxal-Lamber]: I go here 975, 1415!
21:27:50 [Haxal-Lamber]: GotoXY: Cannot reach location!


Дошел до первого препятствия и все и встал...

Code: Select all

if ldc > 10 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end; 
Ldc кол-во попыток кажется не? вобшем не ходит...

Файл с тайлами такой:

Code: Select all

3293 980 1418 -82
3277 975 1415 -83
3280 981 1416 -82
3283 977 1414 -83
3296 979 1422 -83
3293 974 1422 -84
3299 974 1416 -83
3293 980 1413 -83
3277 978 1423 -83
GotoXY написана для слепого хождения , используй MoveXY вместо нее и не парься
читать тут http://stealth.od.ua/forum/viewtopic.php?t=1245
Post Reply