СУндуки менять пробывал . Помогите плиз разобраться в проблеме.Вот скрипт
Code: Select all
program MineBotRiven;
// Скрипт на мининг на шарде FW.
// Все тоже самое, но у ривена, разгрузка в сундук, кирки в мешке там же.
// Все чары в один сундук. Маршрутов всего три: шахта-дом, дом-ГЗ, ГЗ-крест.
//
// v.2.08 (c) Edred
{$Include 'all.inc'}
const
r1 = 10; r2 = 12; r3 = 8;
rmax = 12;                                // максимальный
M_nothing1 = 'There is nothing here';
M_nothing2 = 'That is too far';
M_nothing3 = 'Try mining elsewhere.';
M_nothing4 = 'You cannot mine so close';
M_nothing5 = 'You have no line';
M_nothing6 = 'reach';
M_nothing7 = 'Вы переместили Iron Ore в свою сумку..';
M_nothing8 = 'Вы переместили Jewel of Spirits в свою сумку..';
M_nothing9 = 'Вы переместили Silver Ore в свою сумку..';
M_nothing10 = 'Вы переместили Dark Iron Ore в свою сумку..';
M_fizzles1 = 'You loosen some rocks';
M_fizzles2 = 'не смогли выкопать ничего';
M_needwait = 'You decide not to mine';
M_success = 'Вы переместили';
MaxLimit = 300;               // максимальное кол-во физлов одной точки
Pickaxe1 = $0E85;            // Типы кирок
Pickaxe2 = $0E86;
AnkhID = $40002BA3;
JevelType = $0F29;            // тип Jewel of Spirits
Ore1 = $19B7;               // 1 Ore
Ore2 = $19BA;               // 2 Ore
Ore3 = $19B8;               // 3 Ore
Ore4 = $19B9;               // 4 Ore
Ident = $000046B1;
Sunduk = $4002D21D;
BagPickaxe1 = $4000EB58;
//BagPickaxe2 = $4008AF82;
DeadLife = 40;               // Временно - если меньше здоровья - мы мертвы
                        // Точнее, проверить через реконнект.
type Rail = array[1..rmax] of Integer;
var
Rail_1, Rail_2, Rail_3, StartMinPoint : Rail;
minret, MyMaxWeight,StartFlag, CaveLimit : integer;
IronCnt,BlueriteCnt,ShadowCnt,DarkIronCnt,AgapiteCnt : Integer;
BlackrockCnt,SilverCnt,DiamondCnt,ValoriteCnt,MytherilCnt : Integer;
GoldCnt,VeriteCnt,BloodRockCnt,HowManyDischarge : Integer;
ResCnt : Integer;
ScriptStartTime : TDateTime;
flag1 : Boolean;
function InitConfig : Boolean;
   // Настройка переменных под конкретного чара
   begin
      Result := true;
      // Rail_1: сундук - шахта
      Rail_1[1] := 1666; Rail_1[2] := 3001;
      Rail_1[3] := 1661; Rail_1[4] := 3001;
      Rail_1[5] := 1661; Rail_1[6] := 2997;
      Rail_1[7] := 1661; Rail_1[8] := 2991;
      Rail_1[9] := 1661; Rail_1[10] := 2983;  
      // Rail_2: сундук - ГЗ
      Rail_2[1] := 1331; Rail_2[2] := 2856;
      Rail_2[3] := 1331; Rail_2[4] := 2848;
      Rail_2[5] := 1351; Rail_2[6] := 2828;
      Rail_2[7] := 1370; Rail_2[8] := 2828;
      Rail_2[9] := 1370; Rail_2[10] := 2819;
      Rail_2[11] := 1376; Rail_2[12] := 2813; 
      // Rail_3: ГЗ - крест
      Rail_3[1] := 1376; Rail_3[2] := 2813;
      Rail_3[3] := 1376; Rail_3[4] := 2804;
      Rail_3[5] := 1371; Rail_3[6] := 2804;
      Rail_3[7] := 1371; Rail_3[8] := 2802;
      // Счетчики разгруженной руды
      IronCnt := 0;
      BlueriteCnt := 0;
      ShadowCnt := 0;
      DarkIronCnt := 0;
      AgapiteCnt := 0;
      BlackrockCnt := 0;
      SilverCnt := 0;
      DiamondCnt := 0;
      ValoriteCnt := 0;
      MytherilCnt := 0;
      GoldCnt := 0;
      VeriteCnt := 0;
      BloodRockCnt := 0;
      ResCnt := 0; 
    //if GetName(self) = 'Ident' then
      if self = Ident then
      begin
         MyMaxWeight := 370;
         StartMinPoint[1] := 1649;
         StartMinPoint[2] := 2981;
         StartMinPoint[3] := 1661;
         StartMinPoint[4] := 2977;
         StartMinPoint[5] := 1657;
         StartMinPoint[6] := 2977;
         StartMinPoint[7] := 1653;
         StartMinPoint[8] := 2977;
         StartMinPoint[9] := 1677;
         StartMinPoint[10] := 2977;
         StartMinPoint[11] := 1673;
         StartMinPoint[12] := 2977;
         CaveLimit := 1648;
         exit;
      end;    
      // Если дошли до сюда - это плохо!
      Result := false;
      addtosystemjournal('Error: Не могу настроиться под чара!');
      exit;
   end;
procedure PrintStatistic;
   // выводит в файл с именем charname.log суммарную статистику с запуска скрипта
   begin
      with TStringList.Create do
         try
         Add('Скрипт начал работу: ' + DateTimeToStr(ScriptStartTime));
         Add('             Сейчас: ' + DateTimeToStr(Now));
         Add(' ');
         Add('Количество разгрузок: ' + inttostr(HowManyDischarge));
         Add(' ');
         Add('Добыто:');
         Add('   Iron ' + inttostr(IronCnt));
         Add('   Dark Iron ' + inttostr(DarkIronCnt));
         Add('   Gold ' + inttostr(GoldCnt));
         Add('   Silver ' + inttostr(SilverCnt));
         Add('   Verite ' + inttostr(VeriteCnt));
         Add('   Valorite ' + inttostr(ValoriteCnt));
         Add('   Shadow ' + inttostr(ShadowCnt));
         Add('   Agapite ' + inttostr(AgapiteCnt));
         Add('   Blood Rock ' + inttostr(BloodRockCnt));
         Add('   Mytheril ' + inttostr(MytherilCnt));
         Add('   Diamond ' + inttostr(DiamondCnt));
         Add('   Black Rock ' + inttostr(BlackrockCnt));
         Add('   Bluerite ' + inttostr(BlueriteCnt));
         Add(' ');
         Add('Количество ресов чара: ' + inttostr(ResCnt));
         SaveToFile('__' + GetName(self) + '.log');
         finally
         free;
      end;
   end;
   procedure CheckDead;
      begin
         if Dead then exit;
         if HP < 40 then
         begin
            SetARStatus(False);
            Disconnect;
            wait(5000);
            Connect;
            SetARStatus(True);
            repeat
               wait(100);
            until Connected;
         end;
      end;
function CheckPickaxe : Boolean;
   // Проверяем есть ли кирка и одеваем ее (если необходимо) в правую руку
   // возвращаем true - если все ок, false - если нет кирки
   // Проверка на то, что в руке у чара не кирка не производится!
   var tmpser : Cardinal;
   begin
      Result := true;
      if (ObjAtLayerEx(RhandLayer,self) = 0) then
      begin
         tmpser := findtype(Pickaxe1,backpack);
         if tmpser = 0 then tmpser := findtype(Pickaxe2,backpack);
         if tmpser = 0 then
         begin
            Result := false;
            exit;
         end;
         if not equip(RhandLayer,tmpser) then
         begin
            wait(1000);
            if not equip(RhandLayer,tmpser) then
            begin
               Result := false;
               exit;
            end;
         end;
         wait(500);
         checksave;
      end;
   end;
procedure CheckHide;
   begin
      if Hidden then exit;
      if WarMode = true then SetWarMode(false);
      repeat
         UseSkill('Hiding');
         wait(4500);
         checksave;
      until Hidden or (not Connected);
   end;
function MiningAround : Integer ;
   // копаем вокруг чара
   // параметр - максимальный вес.
   // возвращаем:
   // 1 - вокруг чара все вскопано успешно
   // 2 - превышен максимальный вес
   // 3 - чар под атакой
   // 4 - нет кирки
   var k, r, x, y : Integer;
   var mn1, mn2, mn3, mn4, mn5, mn6, mn7, mn8, mn9, mn10, mf1, mf2, mw1, ms1 : Integer;
   var ctime : TDateTime;
   begin
      Result := 1;
      if (HP < MaxHP) or Dead then
      begin
         Result := 3;
         exit;
      end;
      addtosystemjournal(inttostr(GetX(self)) + ' ' + inttostr(GetY(self)) + ': Начинаем обкопку. Вес чара: ' + inttostr(Weight));
      for x := -2 to 2 do
      begin
         for y := -2 to 2 do
         begin
            r := 0;
            repeat
               waitconnection(5000);
               if (HP < MaxHP) or Dead then
               begin
                  Result := 3;
                  exit;
               end;
               if not CheckPickaxe then
               begin
                  Result := 4;
                  exit;
               end;
               CheckHide;
               if TargetPresent then CancelTarget;
               if WarMode = true then SetWarMode(false);
               ctime := Now;
               UseObject(ObjAtLayerEx(RhandLayer,self));
               WaitForTarget(5000);
               If TargetPresent then TargetToTile(1342, GetX(self)+x, GetY(self)+y, GetZ(self));
               k := 0;
               repeat
                  wait(100);
                  k := k + 1;
                  checksave;
                  mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now);
                  mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now);
                  mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now);
                  mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now);
                  mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now);
                  mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now);
                  mn7 := InJournalBetweenTimes(M_nothing7, ctime, Now);
                  mn8 := InJournalBetweenTimes(M_nothing8, ctime, Now);
                  mn9 := InJournalBetweenTimes(M_nothing9, ctime, Now);
                  mn10 := InJournalBetweenTimes(M_nothing10, ctime, Now);
                  mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now);
                  mf2 := InJournalBetweenTimes(M_fizzles2, ctime, Now);
                  ms1 := InJournalBetweenTimes(M_success, ctime, Now);
               until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mn7<>-1) or (mn8<>-1) or (mn9<>-1) or (mn10<>-1) or (mf1<>-1) or (mf2<>-1) or (ms1<>-1) or (HP < MaxHP) or Dead or (k > 300);
               if (HP < MaxHP) or Dead then
               begin
                  Result := 3;
                  exit;
               end;
               if Weight > MyMaxWeight then
               begin
                  Result := 2;
                  exit;
               end;
               if (mf1<>-1) or (mf2<>-1) then
               begin
                  r := r + 1;
                  if r >= 10 then break
                  else continue;
               end;
               if (mw1<>-1) then wait(3000);
            until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mn7<>-1) or (mn8<>-1) or (mn9<>-1) or (mn10<>-1);
         end;
      end;
   end;
procedure GotoXY(x,y,prec : integer; runflag : boolean);
   // x,y - координаты, в которые идем
   // prec - точность подхода
   // runflag - бежать или идти
   // v. 1.04 (с) Edred, скрипт портирован с инжекта
   // оригинальная версия Yoko с доработкой AGRS и Edred.
   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(4,runflag); continue; end;
         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;
procedure GotoRail(TmpR : Rail; TmpRD : Integer; dir, guard : Boolean);
	// TmpR - маршрут, по которому двигаться
	// TmpRD - размер этого массива
	// dir - направление перемещения по маршруту (true - прямое, false - обратное)
	// guard - звать гвардов если бьют по дороге или нет (true - звать, false - нет)
	// v.1.21 (c) Edred, основана на моих аналогичных функциях для Инжекта и Изи.
	var i,k,x,y : Integer;
   
	begin
	// число элементов в массиве четное. Каждые два - это координаты.
	// 1 : 1,2      2 : 3,4      3 : 5,6      n : n*2-1,n*2
	// обратное направление:
	// 1 : max-1,max   2 : max-3,max-2      n : max-n*2+1,max-n*2+2
	k := TmpRD/2;
	for i := 1 to k do
	begin
		if dir then
		begin x := TmpR[i*2 - 1]; y := TmpR[i*2]; end
		else
		begin x := TmpR[TmpRD - i*2 + 1]; y := TmpR[TmpRD - i*2 + 2]; end;
		if guard AND (HP < MaxHP) then
		begin UOSay( 'GUARDS' ); wait(100); end;
		repeat
		wait(1000);
         addtosystemjournal('Отладка: идем в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]');
            GotoXY(x,y,0,true);
	addtosystemjournal('Отладка: пришли в ' + inttostr(x) + ', ' + inttostr(y) + ' [GotoRail]');         
         until (GetX(self)=x) and (GetY(self)=y);
      end;
   end;
procedure Medita;
   // медитация до полного восстановления маны
   var
      tmptime : TDateTime;
      k : Integer;
   begin
      if WarMode = true then SetWarMode(false);
      waitconnection(5000);
      if (Mana <= MaxMana) then
      begin
         tmptime := Now;
         k:=0;
         repeat
            useskill('meditation');
            wait(2000);
            k := k + 1;
            checksave;
         until (InJournalBetweenTimes('у вас полный уровень маны', tmptime, Now)<>-1) or (k = 100);
         addtosystemjournal('медитация закончена');
      end;
   end;
procedure HealChar;
   // лечение чара спирит спиком до полного здоровья
   var
      tmptime : TDateTime;
      k : Integer;
   begin
      while (HP<MaxHP) do
      begin
         waitconnection(3000);
         tmptime := Now;
         k := 0
         UseSkill('Spirit Speak');
         repeat
            wait(100);
            k := k + 1;
         until (InJournalBetweenTimes('You fail|You channel|You lack|You establish', tmptime, Now)<>-1) or (Mana < (MaxMana - 50)) or (k > 300);
         wait(500);
         if Mana < 30 then Medita;
      end;
   end;
function ResChar : Boolean;
   // Рес чара с креста
   begin
      Result := true;
      WaitConnection(5000);
      if WarMode = true then SetWarMode(false);
      UseObject(AnkhID);
      wait(2000);
      checksave;
      if Dead then
      begin
         addtosystemjournal('Error: не могу реснуться!');
         Result := false;
         exit;
      end;
      ResCnt := ResCnt + 1;
      HealChar;
   end;
function GetPickaxe : Boolean;
   // проверяем, есть ли кирка у чара в паке или на нужном слое.
   // если ее нет - открываем сундук и мешок, берем кирку. Если кирки нет
   // в мешке - выход.
   var tmpser : Cardinal;
   begin
      Result := true;
      waitconnection(3000);
      CheckDead;
      if Dead then
      begin
         Result := false;
         exit;
      end;
      if (ObjAtLayerEx(RhandLayer,self) <> 0) or (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0) then exit;
      // нет у чара кирки
      repeat
         CheckDead;
         if Dead then
         begin
            Result := false;
            exit;
         end;
         waitconnection(3000);
         UseObject(Sunduk);
         wait(1000);
         checksave;
         UseObject(BagPickaxe1);
         wait(1000);
         checksave;
         tmpser := findtype(Pickaxe1,BagPickaxe1);
         if tmpser = 0 then tmpser := findtype(Pickaxe2,BagPickaxe1);
         if tmpser <> 0 then
         begin
            Grab(tmpser,1);
            wait(1000);
            checksave;
         end;
      until (count(Pickaxe1)<>0) or (count(Pickaxe2)<>0);
   end;
function GetOreColor(c : cardinal) : string;
   // сравниваем цвет указанного итема с табличкой и возвращаем
   // название этого цвета с пробелом в начале
   begin
      Result := ' unknown';
      Case GetColor(c) of
         $0000 : begin Result := ' Iron'; IronCnt := IronCnt + GetQuantity(c); end;
         $00BE : begin Result := ' Bluerite'; BlueriteCnt := BlueriteCnt + GetQuantity(c); end;
         $0381 : begin Result := ' Shadow'; ShadowCnt := ShadowCnt + GetQuantity(c); end;
         $0386 : begin Result := ' Dark Iron'; DarkIronCnt := DarkIronCnt + GetQuantity(c); end;
         $0400 : begin Result := ' Agapite'; AgapiteCnt := AgapiteCnt + GetQuantity(c); end;
         $0455 : begin Result := ' Blackrock'; BlackrockCnt := BlackrockCnt + GetQuantity(c); end;
         $0482 : begin Result := ' Silver'; SilverCnt := SilverCnt + GetQuantity(c); end;
         $048F : begin Result := ' Diamond'; DiamondCnt := DiamondCnt + GetQuantity(c); end;
         $0515 : begin Result := ' Valorite'; ValoriteCnt := ValoriteCnt + GetQuantity(c); end;
         $052D : begin Result := ' Mytheril'; MytherilCnt := MytherilCnt + GetQuantity(c); end;
         $0630 : begin Result := ' Gold'; GoldCnt := GoldCnt + GetQuantity(c); end;
         $07D1 : begin Result := ' Verite'; VeriteCnt := VeriteCnt + GetQuantity(c); end;
         $0994 : begin Result := ' Blood Rock'; BloodRockCnt := BloodRockCnt + GetQuantity(c); end;
      end;
   end;
function DischargeSunduk : Boolean; 
   // Разгружаем пак чара в сундук. Возвращаем: 
   // 1 - все ок, пак разгружен. 
   // 0 - не получилось. 
   var tmpcnt : Integer; 
      tmpid, tmpstack : Cardinal; 
      tmpconnect : TDateTime; 
   begin 
      Result := true; 
      waitconnection(3000); 
      tmpconnect := ConnectedTime; 
      CheckDead; 
      if Dead then 
      begin 
         Result := false; 
         exit; 
      end; 
      UseObject(Sunduk); 
      wait(1000); 
      checksave; 
      // Переместим SA 
      tmpcnt := 0; 
      Repeat 
         tmpid := Findtype(SA,backpack); 
         if tmpid = 0 then break; 
         addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + ' SA'); 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить SA!'); 
            Result := false; 
            exit; 
         end; 
         tmpstack := Findtype(SA,Sunduk); 
         // Если не найден в банке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      // Переместим джевелы 
      tmpcnt := 0; 
      repeat 
         tmpid := Findtype(JevelType,backpack); 
         if tmpid = 0 then break; 
         addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + ' Jewels of Spirit'); 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить Jewels of Spirit!'); 
            Result := false; 
            exit; 
         end; 
         tmpstack := Findtype(JevelType,Sunduk); 
         // Если не найден в банке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      // Переместим руду 
      tmpcnt := 0; 
      repeat 
         tmpid := Findtype(Ore1,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore2,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore3,backpack); 
         if tmpid = 0 then tmpid := Findtype(Ore4,backpack); 
         if tmpid = 0 then break; 
         addtosystemjournal( 'Отладка: найдено ' + inttostr(GetQuantity(tmpid)) + GetOreColor(tmpid) +' ore'); 
         tmpcnt := tmpcnt + 1; 
         if tmpcnt > 10 then 
         begin 
            addtosystemjournal('Ошибка: не могу переместить руду!'); 
            Result := false; 
            exit; 
         end; 
         repeat 
            tmpstack := FindtypeEx(Ore1,GetColor(tmpid),Sunduk,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore2,GetColor(tmpid),Sunduk,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore3,GetColor(tmpid),Sunduk,False); 
            if tmpstack = 0 then tmpstack := FindtypeEx(Ore4,GetColor(tmpid),Sunduk,False); 
            if GetQuantity(tmpstack) >= 65000 then Ignore(tmpstack); 
         until (tmpstack = 0) OR (GetQuantity(tmpstack) < 65000); 
         // Если не найден в сундуке - тогда просто в контейнер 
         if tmpstack = 0 then tmpstack := Sunduk; 
         waitconnection(3000); 
         MoveItem(tmpid,GetQuantity(tmpid),tmpstack,0,0,0); 
         wait(1000); 
         CheckSave; 
      until tmpid = 0; 
      HowManyDischarge := HowManyDischarge + 1; 
      PrintStatistic; 
      IgnoreReset; 
   end; 
Begin
   ScriptStartTime := Now;
   HowManyDischarge := 0;
   if not InitConfig then exit;
   StartFlag := 1;
   repeat
   // стартуем от сундука
      CheckDead;
      if not Dead then
      begin
         HealChar;
         CheckDead;
      end;
      if (GetX(self) = Rail_1[1]) and (GetY(self) = Rail_1[2]) then
      begin
         If not dead then if not GetPickaxe then exit;
         addtosystemjournal('Скрипт начинает работу от сундука, идем в шахту');
         GotoRail(Rail_1,r1,true,false);
      end;
      addtosystemjournal('Я в шахте. Начнем с точки ' + inttostr(StartFlag));
      Case StartFlag of
         1 : begin
               GotoXY( StartMinPoint[1],StartMinPoint[2],0,true);
               StartFlag := 2;
            end;
         2 : begin
               GotoXY( StartMinPoint[3],StartMinPoint[4],0,true);
               StartFlag := 3;
            end;
         3 : begin
               GotoXY( StartMinPoint[5],StartMinPoint[6],0,true);
               StartFlag := 4;
            end;
         4 : begin
               GotoXY( StartMinPoint[7],StartMinPoint[8],0,true);
               StartFlag := 5;
            end;
         5 : begin
               GotoXY( StartMinPoint[9],StartMinPoint[10],0,true);
               StartFlag := 6;
            end;
         6 : begin
               GotoXY( StartMinPoint[11],StartMinPoint[12],0,true);
               StartFlag := 1;
            end;
      end;
      repeat
         CheckDead;
         if Dead then break;
         minret := MiningAround;
         CheckDead;
         if Dead then break;
         if minret = 1 then GotoXY(GetX(self)-3,GetY(self),0,false);
         if GetX(self) < (CaveLimit + 3) then break;
      until minret <> 1;
      addtosystemjournal('Пора на разгрузку');
      GotoRail(Rail_1,r1,false,false);
      CheckDead;
      if not Dead then
      begin
         repeat
            WaitConnection(5000);
            CheckDead;
            if Dead then break;
            addtosystemjournal('Пришли на разгрузку');
            flag1 := DischargeSunduk;
            wait(100);
         until flag1 = true;
         addtosystemjournal('Разгрузка закончена');
      end;
      CheckDead;
      if Dead then
      begin
         GotoRail(Rail_2,r2,true,false);
         GotoRail(Rail_3,r3,true,false);
         addtosystemjournal('Надо ресаться');
         repeat
            WaitConnection(5000);
            flag1 := ResChar;
            wait(1000);
         until flag1 = true;
         GotoRail(Rail_3,r3,false,true);
         GotoRail(Rail_2,r2,false,false);
      end;
   until false;
End.

