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

Ходилка+лут трупов

тут можно задать вопрос по скриптингу
Post Reply
Venom
Novice
Novice
Posts: 123
Joined: 25.08.2010 14:00

Ходилка+лут трупов

Post by Venom »

Попробывал написать (вернее скомпелировать из разных) скрипт на ходьбу и лут трупов....
Кому не тяжело, посмотрите своим профессиональным взглядом, что в нем не так и что необходимо сделать, чтобы скрипт заработал.
Сейчас выдает:
13:08:03 [Char]: Compiling
13:08:03 [Char]: Compiler: [Error] (test 1.txt at 124:1): Identifier expected
13:08:03 [Char]: Compiling failed
13:08:03 [TChar]: Script test 1.txt stoped successfuly

Спасибо тем, кто откликнется, чтоб у Вас руки не болели :)

Code: Select all

[color=green]program Loot;
// 
// 

{$Include 'all.inc'}

const
StartPosX = 837; 
StartPosY = 2348;

VAR 
Item: array [1..5] of integer;
Corpse: Cardinal;

procedure GotoXY(x,y,prec : integer; runflag : boolean);
// x,y - координаты, в которые идем
// prec - точность подхода
// runflag - бежать или идти
var ld, ldc, dx, dy, mx, my : Integer;
begin
ld := 0; ldc := 0;
while true do
begin
dx := GetX(self) - x; if dx < 0 then dx := 0 - dx;
dy := GetY(self) - y; if dy < 0 then dy := 0 - dy;
if dy > dx then dx := dy;
if dx <= prec then exit;
mx := GetX(self); my := GetY(self);
dx := mx - x; if dx < 0 then dx := 0 - dx;
dy := my - y; if dy < 0 then dy := 0 - dy;
if dy > dx then dx := dy;
if dx <= prec then exit;
if ld = dx then begin
ldc := ldc + 1;
if ldc > 100 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end;
end
else ld := dx;
waitconnection(5000);
if mx = x then begin
if my = y then exit;
// North
if my > y then begin Raw_Move(0,runflag); continue; end;
// South
Raw_Move(4,runflag); continue;
end;
if mx < x then begin
// Northeast
if my > y then begin Raw_Move(1,runflag); continue; end;
// East
if my = y then begin Raw_Move(2,runflag); continue; end;
// Southeast
Raw_Move(3,runflag); continue;
end;
// Southwest
if my < y then begin Raw_Move(5,runflag); continue; end;
// West
if my = y then begin Raw_Move(6,runflag); continue; end;
// Nortwest
Raw_Move(7,runflag); continue;
end;
end;

Begin
repeat

GotoXY(5558,3191,1,false);
  begin
  FindDistance := 1; 
  if FindType($2006, ground) <> 0 then 
  begin 
  AddToSystemJournal('Найден труп ' + IntToStr(finditem)); 
  Corpse := finditem;
    UseObject(Corpse);
    Wait(1000);
    Ignore(Corpse);
    if FindType($0F2F, Corpse) <> 0 then
    begin
      DragItem(finditem, 0);
      Wait(1000);
      DropItem(backpack,0,0,0);
      Wait(1000);
 AddToSystemJournal('Закончили с трупом.'); 
    end;

if FindType($0F2A, Corpse) <> 0 then
    begin
      DragItem(finditem, 0);
      Wait(1000);
      DropItem(backpack,0,0,0);
      Wait(1000);
 AddToSystemJournal('Закончили с трупом.');
    end;
Wait(2500);

GotoXY(5558,3189,1,false);
begin
  FindDistance := 1; 
  if FindType($2006, ground) <> 0 then 
  begin 
  AddToSystemJournal('Найден труп ' + IntToStr(finditem)); 
  Corpse := finditem;
    UseObject(Corpse);
    Wait(1000);
    Ignore(Corpse);
    if FindType($0F2F, Corpse) <> 0 then
    begin
      DragItem(finditem, 0);
      Wait(1000);
      DropItem(backpack,0,0,0);
      Wait(1000);
 AddToSystemJournal('Закончили с трупом.'); 
    end;

if FindType($0F2A, Corpse) <> 0 then
    begin
      DragItem(finditem, 0);
      Wait(1000);
      DropItem(backpack,0,0,0);
      Wait(1000);
 AddToSystemJournal('Закончили с трупом.');
    end;
Wait(3200);

until Dead;
End.[/color]

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

Re: Ходилка+лут трупов

Post by Macks »

Начни с форматирования кода, тогда поймешь в чем ошибка.

Code: Select all

program Loot;

{$Include 'all.inc'}

const
  StartPosX = 837;
  StartPosY = 2348;

VAR
  Item: array [1..5] of integer;
  Corpse: Cardinal;

procedure GotoXY(x,y,prec : integer; runflag : boolean);
// x,y - координаты, в которые идем
// prec - точность подхода
// runflag - бежать или идти
var ld, ldc, dx, dy, mx, my : Integer;
begin
  ld := 0; ldc := 0;
  while true do
  begin
    dx := GetX(self) - x; if dx < 0 then dx := 0 - dx;
    dy := GetY(self) - y; if dy < 0 then dy := 0 - dy;
    if dy > dx then dx := dy;
    if dx <= prec then exit;
    mx := GetX(self); my := GetY(self);
    dx := mx - x; if dx < 0 then dx := 0 - dx;
    dy := my - y; if dy < 0 then dy := 0 - dy;
    if dy > dx then dx := dy;
    if dx <= prec then exit;
    if ld = dx then 
    begin
      ldc := ldc + 1;
      if ldc > 100 then begin addtosystemjournal( 'GotoXY: Cannot reach location!' ); exit; end;
    end
    else ld := dx;

    waitconnection(5000);
    if mx = x then 
    begin
      if my = y then exit;
      // North
      if my > y then begin Raw_Move(0,runflag); continue; end;
      // South
      Raw_Move(4,runflag); continue;
    end;
    if mx < x then 
    begin
      // Northeast
      if my > y then begin Raw_Move(1,runflag); continue; end;
      // East
      if my = y then begin Raw_Move(2,runflag); continue; end;
      // Southeast
      Raw_Move(3,runflag); continue;
    end;
    // Southwest
    if my < y then begin Raw_Move(5,runflag); continue; end;
    // West
    if my = y then begin Raw_Move(6,runflag); continue; end;
    // Nortwest
    Raw_Move(7,runflag); continue;
  end;
end;

Begin
  repeat
  GotoXY(5558,3191,1,false);
  begin
    FindDistance := 1;
    if FindType($2006, ground) <> 0 then
    begin
      AddToSystemJournal('Найден труп ' + IntToStr(finditem));
      Corpse := finditem;
      UseObject(Corpse);
      Wait(1000);
      Ignore(Corpse);
      if FindType($0F2F, Corpse) <> 0 then
      begin
        DragItem(finditem, 0);
        Wait(1000);
        DropItem(backpack,0,0,0);
        Wait(1000);
        AddToSystemJournal('Закончили с трупом.');
      end;

      if FindType($0F2A, Corpse) <> 0 then
      begin
        DragItem(finditem, 0);
        Wait(1000);
        DropItem(backpack,0,0,0);
        Wait(1000);
        AddToSystemJournal('Закончили с трупом.');
      end;
      
      Wait(2500);
      GotoXY(5558,3189,1,false);

      begin
        FindDistance := 1;
        if FindType($2006, ground) <> 0 then
          begin
            AddToSystemJournal('Найден труп ' + IntToStr(finditem));
            Corpse := finditem;
            UseObject(Corpse);
            Wait(1000);
            Ignore(Corpse);
            if FindType($0F2F, Corpse) <> 0 then
            begin
              DragItem(finditem, 0);
              Wait(1000);
              DropItem(backpack,0,0,0);
              Wait(1000);
              AddToSystemJournal('Закончили с трупом.');
            end;

           if FindType($0F2A, Corpse) <> 0 then
           begin
             DragItem(finditem, 0);
             Wait(1000);
             DropItem(backpack,0,0,0);
             Wait(1000);
             AddToSystemJournal('Закончили с трупом.');
          end;
          Wait(3200);

          until Dead;
End.
Post Reply